2017-08-09 53 views
0

我已經創建了一些編碼,用於循環訪問數據集並根據所需條件刪除行。我需要幫助,因爲它會刪除第一個找到的匹配條件,但不會循環訪問其餘的數據。我錯過了什麼?許多謝謝VBA循環和刪除問題

Sub RemoveFivePoundException() 

Dim I As Integer 
Dim LR As Long 

Application.ScreenUpdating = False 


Sheets("Claims").Select 
LR = Cells(Rows.Count, "A").End(xlUp).row 
Range("a1").Select 

For I = 3 To LR 
    If Cells(I, 6).Value > 5# And Cells(I, 7) = "Under £5 write off" Then 
     Cells(I, 1).EntireRow.Delete 
    End If 

    Next I 

Application.ScreenUpdating = True 

End Sub 
+0

[Excel VBA刪除行]的可能重複(https://stackoverflow.com/questions/35042717/excel-vba-delete-rows) –

回答

0

刪除行時,應該反轉循環。隨着每一行刪除,下一行的索引已經改變。

改變你的循環中:

For I = LR To 3 step -1 'Invert loop! 
    If Cells(I, 6).Value > 5# And Cells(I, 7) = "Under £5 write off" Then 
     Cells(I, 1).EntireRow.Delete 
    End If 
Next I 

或者,你可以這樣做:

For I = 3 To LR 
    If Cells(I, 6).Value > 5# And Cells(I, 7) = "Under £5 write off" Then 
     Cells(I, 1).EntireRow.Delete 
     I = I - 1 'To avoid skipping rows. 
    End If 
Next I 

按照下面第二種選擇作品的意見,但不好的做法。

+0

您的替代解決方案不是一個好的選擇。在這種情況下,您將處理更多的行,而不是從3到LR,對於每個刪除的行,恰好會再增加1行。查看[this](https://stackoverflow.com/a/45568605/5722505)以獲取更多詳細信息。 –

+0

我知道,但它的作品。建議是向後循環。 –

+0

謝謝里克像夢一樣工作! – Matt555