我正在创建一个工具,该工具需要删除“ 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
答案 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
我更喜欢使用过滤器。