在2个日期范围之间过滤

时间:2019-01-02 11:32:31

标签: excel vba filtering

我想在2个日期范围之间过滤1个数据。

日期范围1:从昨天的日期返回到之前的28天。
日期范围2:从昨天的日期追溯到一年前的28天。

要过滤到一个日期范围,我可以使用以下代码:

Sub DateFilter()

Dim StartDateTY As Date
Dim EndDateTY As Date
StartDateTY = Date - 29
EndDateTY = Date - 1

Sheets("Main").Range("$A$4:$O$5000").AutoFilter Field:=2, _
 Criteria1:=">=" & CDbl(StartDateTY), Operator:=xlAnd, _
 Criteria2:="<=" & CDbl(EndDateTY)

End Sub

我当时想我可以使用数组来使用2个不同的日期范围,但无法正常工作。

Sub DateFilter2Ranges()

Dim StartDateTY As Date
Dim EndDateTY As Date
StartDateTY = Date - 29
EndDateTY = Date - 1

Dim StartDateLY As Date
Dim EndDateLY As Date
StartDateLY = Date - 29 - 365
EndDateLY = Date - 1 - 365

Sheets("Main").Range("$A$4:$O$5000").AutoFilter Field:=2, _
  Criteria1:=Array(0, ">=" & CDbl(StartDateTY), 0, ">=" & CDbl(StartDateLY)), Operator:=xlAnd, _
  Criteria2:=Array(1, "<=" & CDbl(EndDateTY), 1, "<=" & CDbl(EndDateLY))

End Sub

我还认为,如果可能的话,我可以混合使用'And'和'Or'运算符。

2 个答案:

答案 0 :(得分:1)

要在自动过滤器中使用日期,您需要了解一件事-自动过滤器只能识别 美国日期格式:月/日/年

Sub FFF()

    Dim dt1 As Date, dt2 As Date
    Dim sDate1$, sDate2

    '// Get dates
    dt1 = Now - 29: dt2 = Now - 1

    '// Format dates
    sDate1 = Format(dt1, "MM\/yy\/yyyy")
    sDate2 = Format(dt2, "MM\/yy\/yyyy")

    With Sheets("Main").Range("A1").CurrentRegion
        .AutoFilter
        .AutoFilter Field:=2, Criteria1:=">=" & sDate1, Operator:=xlAnd, Criteria2:="<=" & sDate2

    End With

End Sub

答案 1 :(得分:-1)

简单的代码可以过滤范围内的日期,进行修改以满足您的需求...

With ThisWorkbook.Sheets("Main").Cells(1, 1).CurrentRegion
    .AutoFilter
    .AutoFilter Field:=2, Criteria1:=">=" & (Now - 29), Operator:=xlAnd, Criteria2:="<=" & (Now - 1)
    'Do something

    .AutoFilter Field:=2, Criteria1:=">=" & (Now - 394), Operator:=xlAnd, Criteria2:="<=" & (Now - 365)
    'Do something

End With