Ich muss eine Spalte nach Daten filtern. Ich bestimme die Anzahl der benötigten Daten und wende dann den Filter an. Ursprünglich dachte ich, es gäbe nur 2 Fälle, Dienstag bis Freitag, wo du das vorherige Datum benutzt. Und Montag, wo Freitag, Samstag und Sonntag benötigt werden.Excel Autofilter Kriterien Array Schleife
Dann erkannte ich, dass es am Freitag oder Montag einen Urlaub geben könnte, und es würde mehr Daten erfordern ... und es könnte einen Wochenmitte-Feiertag geben, wie Thanksgiving. Ich kam dann mit diesem bis zu den vier häufigsten Möglichkeiten abdecken:
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
Dann dachte ich, was ist, wenn die Person, die diese läuft für den Urlaub für eine Woche ist aus ... und warf in der Case Else
.
Jetzt denke ich, dass der einfachste und sauberste Weg sein wird, einfach die Anzahl der Daten zu bestimmen, die vom letzten Datum, das dLast
und jetzt ausgeführt wurde, benötigt werden. Setze das in ein Array und verwende das als Kriterium ... aber ich kann die Syntax nicht herausfinden.
Auf diese, aber noch kann es aber nicht funktioniert:
- AutoFilter Criteria Using Array (Error) - Too Large String?
- How do I autofilter using an array for criteria
- How to transfer criteria from string array to autofilter. VBA Excel
Dies ist mein Testcode mit der Syntax und Daten zu spielen blatt:
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
Der Makro-Recorder spuckt die 3 Tage, für die Verwendung von aus:
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")
Was bin ich ??
Sie könnten die öffentlichen Feiertage in dem Blatt, dann Machen Sie etwas wie dim r als Bereich: set r = find (Datum, Feiertage): wenn r nichts ist, dann keine Bankfeiertage durch Ihre Daten, oder verwenden Sie application.countif (öffentliche hols, date) Sie könnten auch versuchen, den Fehler abzufangen Hinzufügen jedes Filters der Reihe nach, wenn also 01/01/16 nicht im Filter ist, wird es einen Fehler geben, dann gehe zum nächsten weiter. –
Ich habe darüber nachgedacht, aber das ist für einen Benutzer, der dann diese Feiertagsliste möglicherweise aktualisieren müsste ... und das wäre ein Albtraum. Außerdem möchten sie diese Daten unabhängig vom Urlaubsstatus überprüfen können. – Rdster