2017-08-09 40 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