如果日期较早,如何制作删除行的代码

时间:2019-04-16 15:07:40

标签: excel vba

我正在创建一个工具,该工具需要删除“ E”列中的日期早于2019年1月1日的行。

Sub OlderDateDelete()

Dim i As Variant

Application.DisplayAlerts = False

For i = Sheets("Iberica Not Sent").Count To 2 Step -1
    If Sheets(i).Range("E2").Value < DateValue("01/01/2019") Then
        Sheets(i).Delete
    End If
Next i

Application.DisplayAlerts = True

End Sub

3 个答案:

答案 0 :(得分:0)

观看以下行:

If Sheets(i).Range("E2").Value < DateValue("01/01/2019") Then
    Sheets(i).Delete
End If

这些行将删除您的工作表。

我认为您应该将其编辑为:

If Rows(i).Range("E2").Value < DateValue("01/01/2019") Then
    Rows(i).Delete
End If

答案 1 :(得分:0)

我最容易想到的是将日期“ 01/01/2019”放入单元格中,在我的示例中为“ G1”

然后将每个范围转换为该单元格并删除它们:

Sub DeletePreviousYears()
Dim i As Long
Dim LastRow As Long
LastRow = Sheets("Iberica Not Sent").Range("E" & Rows.Count).End(xlUp).Row

Application.DisplayAlerts = False


For i = LastRow To 2 Step -1

   If Range("E" & i) <> "" And Range("E" & i).Value < Range("G1").Value Then
       Rows(i).Delete
   End If

Next i

Application.DisplayAlerts = True
End Sub

最好的方法是使用“函数”找到“最后一行”并返回循环。 同样,在使用Sheets的第一个代码中,您正在遍历工作表而不是行。

答案 2 :(得分:0)

这是为了回答您的书面问题。您可以使用Autofilter,然后删除标题行以外的所有可见数据。

With Sheets("Iberica Not Sent")
    .AutoFilterMode = False
        With Range("A1").CurrentRegion
            .AutoFilter Field:=5, Criteria1:="<01/01/2019"
            On Error Resume Next
            .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        End With
    .AutoFilterMode = False
End With

或者,您可以像这样循环

Dim lr As Long
Dim i As Long

lr = Cells(Rows.Count, 1).End(xlUp).Row

    For i = lr To 2 Step -1
        If Cells(i, "E") < DateValue("01/15/2019") Then
            Cells(i, "E").EntireRow.Delete
        End If
    Next i

我更喜欢使用过滤器。