Macro - delete rows based on date

前端 未结 4 1696
北恋
北恋 2020-12-17 07:36

I am very new to VBA and macros in Excel. I have a very large excel spreadsheet in which column A holds dates. I am trying to delete the rows which have a value smaller than

4条回答
  •  误落风尘
    2020-12-17 08:02

    This lends itself well to using the .AutoFilter property of a Range. The script below contains a comment for each step taken:

    Option Explicit
    Sub DeleteDateWithAutoFilter()
    
    Dim MySheet As Worksheet, MyRange As Range
    Dim LastRow As Long, LastCol As Long
    
    'turn off alerts
    Application.DisplayAlerts = False
    
    'set references up-front
    Set MySheet = ThisWorkbook.Worksheets("Sheet1")
    
    'identify the last row in column A and the last col in row 1
    'then assign a range to contain the full data "block"
    With MySheet
        LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
        LastCol = .Range("A" & .Columns.Count).End(xlToLeft).Column
        Set MyRange = .Range(.Cells(1, 1), .Cells(LastRow, LastCol))
    End With
    
    'apply autofilter to the range showing only dates
    'older than january 1st, 2013, then deleting
    'all the visible rows except the header
    With MyRange
        .AutoFilter Field:=1, Criteria1:="<1/1/2013"
        .SpecialCells(xlCellTypeVisible).Offset(1, 0).Resize(.Rows.Count).Rows.Delete
    End With
    
    'turn off autofilter safely
    With MySheet
        .AutoFilterMode = False
        If .FilterMode = True Then
            .ShowAllData
        End If
    End With
    
    'turn alerts back on
    Application.DisplayAlerts = True
    
    End Sub
    

    Running this code on a simple example (on "Sheet1" in this picture) that looks like this:

    start

    Will delete all rows with a date older than 1/1/2013, giving you this result:

    end

提交回复
热议问题