如何使用动态多个日期过滤掉VBA

时间:2017-11-07 16:14:04

标签: excel vba excel-vba

我对vba很新,我的问题是我需要在一个表中过滤掉特定的日期。

逻辑是过滤掉每周不需要的日期。 一个例子是我的原始数据包含2017年10月29日至2017年6月11日的日期,当时我需要的日期仅为2017年5月10日/ 2017年5月10日。我试图录制一个宏,但我需要它是动态的,因为它是每周运行的。

这是我到目前为止所获得的代码。

ActiveSheet.ListObjects("Table6").Range.AutoFilter Field:=7, Operator:= _
        xlFilterValues, Criteria2:=Array(2, "10/30/2017", 2, "10/31/2017", 2, "11/1/2017", _
        2, "11/2/2017", 2, "11/3/2017", 2, "11/4/2017", 2, "11/5/2017")

希望有人帮忙! 提前致谢

2 个答案:

答案 0 :(得分:1)

我写了一个函数,它可以返回一个数组,包括一周后跟给定日期。我编辑了这个函数,以便您可以输入一个日期,该日期将在该日期之后生成一周,或两个日期,这将生成两个给定日期之间的日期数组。

Private Function GenWeek(ByVal Day1 As Date, Optional ByVal Day2 As Date) As Variant
    Dim Week() As Variant
    If Day2 <> 0 Then
        ReDim Week(1 To (Day2 - Day1 + 1) * 2) As Variant
    Else
        ReDim Week(1 To 14) As Variant
    End If

    For i = 1 To UBound(Week) / 2
        Week(i * 2 - 1) = 2
        Week(i * 2) = Day1 + i - 1
    Next i

    GenWeek = Week
End Function

您的代码可以重写如下。

ActiveSheet.ListObjects("Table6").Range.AutoFilter Field:=7, Operator:= _
    xlFilterValues, Criteria2:=GenWeek(Date)

答案 1 :(得分:1)

两个'肩膀'日期之间的(作为文字)。

Dim d1 As String, d2 As String
d1 = Format(Date - Weekday(Date, vbThursday), "\>\=mm/dd/yyyy")
d2 = Format(Date - Weekday(Date, vbThursday) + 6, "\<\=mm/dd/yyyy")
With ActiveSheet.ListObjects("Table6")
    .Range.AutoFilter Field:=7, Operator:=xlAnd, _
                    Criteria1:=d1, Criteria2:=d2
End With