在VBA循环中的代码永远不会结束。 如何解决这个问题?

我运行这个代码来删除有> -100的行。 然而,它保持循环,永不停止。

我在这里错过了什么?

For i = 2 To 500 If Worksheets("Sales").Cells(i, 3).Value > -100 Then Worksheets("Sales").Cells(i, 3).EntireRow.Delete i = i - 1 End If Next i 

也许你可以联合行,并删除它们? 像这样(未经testing)。

 Dim myRow As Range Dim toDelete As Range For i = 2 To 500 If Worksheets("Sales").Cells(i, 3).Value > -100 Then Set myRow = Worksheets("Sales").Rows(i) If toDelete Is Nothing Then Set toDelete = myRow Else Set toDelete = Union(toDelete, myRow) End If End If Next i If Not toDelete Is Nothing Then _ toDelete.Delete 

在VBA中删除或插入行时,您需要从最后一行开始向第一行移动,因为一旦删除或插入了新行,任何给定的行都将在循环中丢失。

请参阅下面的代码:

 For i = 500 To 2 Step -1 If Worksheets("Sales").Cells(i, 3).Value > -100 Then Worksheets("Sales").Cells(i, 3).EntireRow.Delete End If Next I 

编辑

我只是想到了这一点,这将运行得更快(特别是如果你有超过500个单元):

 With Worksheets("Sales") 'assumes row 1 is headers .Range("C1:C500").AutoFilter 1, ">-100" .Range("C2:C500").SpecialCells(xlCellTypeVisible).EntireRow.Delete .AutoFilterMode = False End With