【发布时间】:2021-11-11 08:19:01
【问题描述】:
我试图让我的 For 循环从我的工作表中删除一列中的所有 0,但它似乎留下了大约 9 行有 0。0 位于上一个过程中使用的列中InStr 函数和 9 0 是由于该函数无法找到子字符串。不确定这是否是问题所在。我的工作表中有大约 50,000 行。
Sub removeZeros()
Dim rng As Range, i As Long
Set rng = ActiveSheet.Range(Range("G2"), Range("G2").End(xlDown))
For i = rng.Rows.Count To 1 Step -1
If rng.Cells(i, 3).Value = 0 Then rng.Cells(i).EntireRow.Delete
Next i
End Sub
任何帮助将不胜感激!
【问题讨论】:
-
您知道您检查了
rng.Cells(i, 3).Value = 0第一列中的值吗?而且您还知道,如果单元格包含字符串,则比较rng.Cells(i, 3).Value = 0将是true? -
我在 VBA 方面没有经验,但我记得空列也可能会造成这样的问题 - 我不确定,如果是这种情况 - 可能是这 9 0 一个接一个?
-
@Storax 不是这样的,
rng.Cells(rows , cols),如果那么它实际上是正确的 -
是的,如果单元格为空,则比较
rng.Cells(i, 3).Value = 0也将为真。如果要检查列 I 中的值,则必须调试并检查rng.Cells(i, 3).Value = 0是否为真。您可以在If rng.Cells(i, 3).Value = 0 Then rng.Cells(i).EntireRow.Delete之前添加Debug.Assert rng.Cells(i, 3).Value <> 0,然后只要rng.Cells(i, 3).Value = 0为真,代码就会停止。 -
Set rng = Range("G2:G" & cells(rows.count,"G").end(xlup).row)