【发布时间】:2020-06-19 20:00:43
【问题描述】:
Sub letr()
Dim i As Integer
For i = 3 To 25
If Cells(i, 7) <> "CA" Then
Rows(i).Delete
End If
Next i
End Sub
上面的代码并没有删除所有的结果(总共4个)。我必须运行代码两次才能删除所有 4 个结果。谁能告诉我我做错了什么?
【问题讨论】:
-
这是一个反复出现的问题。从底部运行删除,或者您根本不迭代所有行。要看到这种情况发生,请使用
F8单步执行您的代码并查看每一步的结果。再说一次,最好不要一个接一个地删除,而是在你使用Union之后一次性删除。这是example。让我知道这是否能回答您的问题,以便我们关闭此线程。 -
如果您从上到下删除,您实际上是在向上移动行,而您的迭代器 i 仍在向前推进。这意味着如果您有 3:NY 4:NY 5:CA 则在 i = 3 时,第一个 NY 将被删除。现在您还有 3:NY 4:CA,但您的迭代器已经前进并且 i = 4。由于您删除了第 3 行,因此在这种情况下,新的第 3 行仍保留值 NY,但您的循环已继续检查第 4 行。