我运行此代码来删除包含>的行-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
答案 0 :(得分:7)
在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
答案 1 :(得分:7)
也许你可以联合行并立即删除它们?像这样(未经测试)。
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