Excel:使用VBA删除指定date范围内的行

我有一本20页左右的练习册。 在每张表中,列A有date,列B有数据点。 A列在每张纸上都不一样! 我想根据date范围删除不需要的数据。 我已经试过了,而且运行了很长时间,但什么都不做。

Sub DeleteRowBasedOnDateRange() Dim RowToTest As Long Dim ws As Worksheet For Each ws In ThisWorkbook.Sheets For RowToTest = ws.Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 With ws.Cells(RowToTest, 1) If .Value > #6/16/2015# _ And .Value < #6/22/2015# _ Then _ ws.Rows(RowToTest).EntireRow.Delete End With Next RowToTest Next End Sub 

build议?

  Sub DeleteRowBasedOnDateRange() Dim RowToTest As Long Dim ws As Worksheet For Each ws In ThisWorkbook.Sheets For RowToTest = ws.Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 With ws.Cells(RowToTest, 1) If .Value < #6/16/2015# _ Or .Value > #6/22/2015# _ Then _ ws.Rows(RowToTest).EntireRow.Delete End With Next RowToTest Next End Sub 

这段代码对我来说工作得很好。 你说每张纸的date是不同的格式。 也许你需要尝试在运行macros之前修正格式,因为它可能不被看作是一个date。 – bbishopca

bbshopca你是对的! 它确实有效。 原来我的逻辑都是倒退的。 我想删除2015-06-16到2015-06-22范围之外的date,而不是在范围之内。 由于我有这么多行数据,我会看到2015-06-16之前的date没有被删除,并认为我的代码不起作用。 感谢所有的input。

要加快速度,而不是一次删除一行,可以按date对列进行sorting,然后使用cells.find查找该范围内的行。 保存这些行,然后一次删除行的范围。 通过这样做它不那么蛮力,它只需要find2个单元格,并删除行一次。