[英]Excel Autofilter Criteria array loop
我需要按日期過濾一列。 我確定所需的日期數,然后應用過濾器。 最初我認為只有 2 種情況,即周二到周五,您使用前一個日期。 周一需要周五、周六和周日。
然后我意識到周五或周一可能會有假期,這需要更多的日期……而且可能會有周中假期,比如感恩節。 然后我想出了這個來涵蓋 4 種最常見的可能性:
dPosting = dLast + 1 'dLast is the last Date used in the filter
Select Case Date - dLast
Case 2: 'Regular T - F (1 day)
shFF.Range("A1", shFF.Cells(lMax, lCol)).AutoFilter Field:=cFind.Column, Operator:=xlFilterValues, Criteria1:=Array(2, dPosting)
Case 3: 'Midweek Holiday (2 days)
shFF.Range("A1", shFF.Cells(lMax, lCol)).AutoFilter Field:=cFind.Column, Operator:=xlFilterValues, Criteria1:=Array(2, dPosting, 2, dPosting + 1)
Case 4: 'Regular Monday (3 days)
shFF.Range("A1", shFF.Cells(lMax, lCol)).AutoFilter Field:=cFind.Column, Operator:=xlFilterValues, Criteria1:=Array(2, dPosting, 2, dPosting + 1, 2, dPosting + 2)
Case 5: 'After F or M Holiday (4 days)
shFF.Range("A1", shFF.Cells(lMax, lCol)).AutoFilter Field:=cFind.Column, Operator:=xlFilterValues, Criteria1:=Array(2, dPosting, 2, dPosting + 1, 2, dPosting + 2, 2, dPosting + 3)
Case Else: 'Other
MsgBox "Too many days since last run. Please contact me", vbCritical, "Out of Scope"
End Select
然后我想,如果運行它的人休假一周……然后扔進Case Else
怎樣。
現在我認為最簡單和最干凈的方法是簡單地確定從運行dLast
和 Now 的最后一個日期開始所需的日期數。 將它放入一個數組並將其用作標准......但我無法弄清楚語法。
檢查了這些,但仍然無法使其工作:
這是我使用語法和數據表的測試代碼:
Sub Test()
Dim i As Integer
Dim d As Date
Dim sArr(0 To 2) As String
d = #4/25/2016#
For i = 0 To 2
sArr(i) = "2, """ & d + i & """"
Next i
ActiveSheet.Range("$A$1:$R$16643").AutoFilter Field:=17, Operator:=xlFilterValues, Criteria1:=sArr
End Sub
宏記錄器使用 3 個日期對此進行了說明:
ActiveSheet.Range("$A$1:$R$16643").AutoFilter Field:=17, Operator:=xlFilterValues, _
Criteria2:=Array(2, "4/25/2016", 2, "4/26/2016", 2, "4/27/2016")
我錯過了什么??
你能不能使用這樣的東西,並計算日期,dt1 和 dt2,使用日期 - dLast,而不是選擇,然后嘗試
.AutoFilter Field:=2, Criteria1:= ">=" & dt1, Operator:=xlAnd, Criteria2:="<=" & dt2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.