因此,如果列B在2018年(1/1/2018)之前或列D小于1,则应删除整行,问题是我的代码正在运行但未满。它不会删除符合条件的所有行,而只会删除满足条件的一些行。
我的代码也是
Dim wks As Worksheet
Dim i As Long
Dim LastRow Aqs Long
Dim PODate As Date
Dim THDate As Date
Worksheets("testPO").Activate
Set wks = ActiveSheet
LastRow = wks.Cells(wks.Rows.Count, "A").End(xlUp).Row
Cells(LastRow, "A").Activate
For i = 8 To LastRow
If Cells(i, "D").Value < 1 Or Cells(i, "B") < 43101 Then
Rows(i).Select
Selection.Delete Shift:=xlUp
End If
Next i
End Sub
答案 0 :(得分:3)
向后工作,否则您将跳过行。如果要删除第9行,则第10行将成为新的第9行。在下一次迭代中,您将检查第10行,从而跳过原来的第10行,该行已成为第9行。
Dim i As Long
with Worksheets("testPO")
For i = .Cells(.Rows.Count, "A").End(xlUp).Row to 8 step -1
If .Cells(i, "D").Value2 < 1 Or .Cells(i, "B").value2 < 43101 Then
.Rows(i).entirerow.Delete Shift:=xlUp
End If
Next i
end with
答案 1 :(得分:0)
您要在删除时退一步,不要错过任何内容,因为循环将使变量i递增,而与删除无关:
If Cells(i, "D").Value < 1 Or Cells(i, "B") < 43101 Then
Rows(i).Select
Selection.Delete Shift:=xlUp
i = i - 1 ' STEP BACK!
End If