用空白替换包含零的单元格

Kyl*_*e L 1 excel vba

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

我可以用循环来做到这一点,但它很慢。下面的代码:

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
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以在不循环的情况下做到这一点?

我尝试了下面的代码,但它似乎无法正常工作。它会挂起 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
Run Code Online (Sandbox Code Playgroud)

Exc*_*ero 5

这是自动替换所需的所有 VBA:

[a4:ew10000].Replace 0, "", 1
Run Code Online (Sandbox Code Playgroud)

.

更新

虽然以上内容很简洁,但以下内容可能是最快的方法。在我的计算机上,整个范围只需要不到四分之一秒的时间:

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
Run Code Online (Sandbox Code Playgroud)