如果日期小于日期或数字小于1,则删除整行

时间:2018-07-26 18:57:07

标签: excel vba excel-vba date-comparison

嗨,我有下面的床单,我正在尝试清洁它, the table that I have is attached below

因此,如果列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

2 个答案:

答案 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