我对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")
希望有人帮忙! 提前致谢
答案 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