从工作表中删除旧数据(Microsoft Excel)
吉恩(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的较早菜单界面的本技巧的版本: