Codice in loop VBA e non finisce mai. Come risolvere questo?

Eseguo questo codice per eliminare le righe che hanno> -100. Tuttavia continua a girare e non si ferma mai.

Cosa mi manca qui?

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 

Forse potresti unire le righe e cancellarle contemporaneamente? Qualcosa di simile (non testato).

 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 

Quando si eliminano o si inseriscono righe in VBA, è necessario iniziare con l’ ultima riga e spostarsi verso il primo , poiché ogni riga verrà persa nel ciclo una volta eliminata o nuove righe.

Guarda il codice qui sotto:

 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 

MODIFICARE

Ho pensato anche a questo, che funzionerà molto più velocemente (specialmente se avessi più di 500 celle):

 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