vba自动过滤器用于空白和今年的所有日期

时间:2018-03-09 22:32:10

标签: excel-vba autofilter vba excel

我一直在尝试使用VBA过滤当前年份中任何日期的特定列(动态)加上任何空白单元格。

这就是我所拥有的:

ActiveSheet.Range("A1", "HZ" & LastRow).AutoFilter Field:=60, Criteria1:="=", Operator:=xlOr, Criteria2:=xlFilterThisYear, Operator:=xlFilterDynamic

Criteria1过滤器为空白和标准2过滤了今年的动态过滤器。

单独使用时,它们都可以工作,但是当我希望它们一起工作时,只有最快的标准才有效。顺便说一句,我已经尝试过xlAnd和xlOr以防万一!!

当我录制宏来执行此操作时,我记录了以下语句:

ActiveSheet.Range("A1", "HZ" & LastRow).AutoFilter Field:=60, Criteria1:=Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, "3/2/2018").

这很有效,但正如你所看到的,那里有一个艰难的约会,我需要每周更换一次,所以我想要一个更好的解决方案。

2 个答案:

答案 0 :(得分:0)

希望您可以使用此代码为Autofilter提供动态过滤器值:

Dim startDate As Long,
Dim enddate As Long
startDate = Range("B1")
Enddate = Range("B2")
Range("D2:D123").AutoFilter Field:=1,
Criteria1:=">=" & startDate, _ Operator:=xlAnd, _ Criteria2:="<=" &
Enddate

答案 1 :(得分:0)

这将隐藏一年中第一年之前的所有日期和第60列中的空单元格。如果要隐藏当前年份的日期,请更改&#34;&lt;&#34;到&#34;&gt;&#34;。要撤消hiddne行,请使用此代码Rows.EntireRow.Hidden = False

Dim ws As Worksheet, lRow As Long, i As Long

Set ws = ActiveSheet

lRow = ws.Cells(Rows.Count, 60).End(xlUp).row

Dim CurYr As Double
CurYr = DateSerial(Year(Date), 1, 1)

    For i = 1 To lRow
        If Cells(i, 60) < CurYr Or Cells(i, 60) = "" Then
        Rows(i).Hidden = True
        End If
    Next