将包含零的单元格replace为空白

我有一个非常大量的数据A4:EW8000 +,我想用空白单元格replace包含零的单元格。 格式化单元格不是一个选项,因为我需要保留当前的格式。 我正在寻找用空白单元replace零的最快方法。

我可以用循环做这个,但是速度很慢。 下面的代码:

Sub clearzero() Dim rng As Range For Each rng In Range("A1:EW10000") If rng.Value = 0 Then rng.Value = "" End If Next End Sub 

有没有一个简单的方法,我可以做到这一点没有循环?

我试了下面的代码,但它似乎并没有正常工作。 它暂停Excel一段时间(没有响应),然后循环遍历范围和空白每个单元格。

 Sub RemoveZero() Dim LastRow As Long Const StartRow As Long = 2 LastRow = Cells.Find(What:="0", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row With Range("B:EW") .Value = Range("B:EW").Value .Replace "0", "0", xlWhole, , False On Error Resume Next .SpecialCells(xlConstants).Value = "" .SpecialCells(xlFormulas).Value = 0 End With End Sub 

这是你需要自动化replace的所有VBA:

 [a4:ew10000].Replace 0, "", 1 

UPDATE

虽然上面是简洁的,但以下可能是最快的方式。 我的计算机在整个范围内所用的时间不到四分之一秒:

 Sub RemoveZero() Dim i&, j&, v, r As Range Set r = [a4:ew10000] v = r.Value2 For i = 1 To UBound(v, 1) For j = 1 To UBound(v, 2) If Len(v(i, j)) Then If v(i, j) = 0 Then r(i, j) = vbNullString End If Next Next End Sub 

我发现有时在这样的批量replace操作中循环访问实际上是更方便的。

 dim c as long with worksheets("Sheet1") with .cells(1, 1).currentregion for c = 1 to .columns.count with .columns(c) .replace what:=0, replacement:=vbNullString, lookat:=xlWhole end with next c end with end with 

将整个范围拆分成几个较小的操作可以提高整体性能。 我自己的经验是在一些较大的数据块(如142列×〜250K行),并从SQL提要replaceNULL不为零,但这应该有所帮助。