VBA中的代码循环并且永不结束.如何解决这个问题?

Ene*_*oma 4 excel vba excel-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
Run Code Online (Sandbox Code Playgroud)

Sco*_*man 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
Run Code Online (Sandbox Code Playgroud)

编辑

我只是想到了这一点,它将运行得更快(特别是如果你有超过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
Run Code Online (Sandbox Code Playgroud)


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