吉恩(Gene)正在寻找一种根据特定列中的日期快速删除工作表中数据的方法。如果日期早于今天(日期已过),则应删除该行。

使用宏可以很容易地做到这一点。您需要做的就是让宏逐步遍历数据,并将每行中的日期与今天的日期进行比较。如果日期小于今天,则在EntireRow对象上使用Delete方法。

Sub DeleteRows1()

Dim x As Long     Dim iCol As Integer

iCol = 7 'Filter all on Col G

For x = Cells(Cells.Rows.Count, iCol).End(xlUp).Row To 2 Step -1         If Cells(x, iCol).Value < Date Then             Cells(x, iCol).EntireRow.Delete         End If     Next End Sub

在此示例中,宏检查日期(在iCol变量中)的G列。如果您的日期在其他列中,则应更改该变量。根据工作表中数据的行数,宏可能还需要花费一些时间才能运行。

如果发现性能有所下降,则可能需要使用其他方法。下面的示例使用Excel的自动筛选功能来首先筛选数据以仅显示旧数据,然后删除这些行。

Sub DeleteRows2()

Dim Dates As Range     Dim nRows As Double     Dim currDate As Variant

'Format dates as text     Range("Dates").NumberFormat = "@"

'Today's date in number format     currDate = CDbl(Date)

Range("Dates").AutoFilter Field:=1, _       Criteria1:="<" & currDate     nRows = Range("Dates").Rows.Count     Rows("2:" & nRows).Select     Selection.Delete Shift:=xlUp     Range("Dates").AutoFilter     Range("Dates").NumberFormat = "m/d/yyyy"

Range("C2").Select End Sub

该宏假定您已采取为数据范围分配名称的步骤。选择数据表中的所有单元格(包括任何标题行),并将其命名为“日期”。当您运行宏时,它将使用此范围作为自动筛选的目标。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(10783)适用于Office 365中的Microsoft Excel 2007、2010、2013、2016、2019和Excel。您可以在此处找到适用于Excel的较早菜单界面的本技巧的版本: