Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Autofilter Kriterien vorgeben

Forumthread: Autofilter Kriterien vorgeben

Autofilter Kriterien vorgeben
27.04.2016 21:00:56
Patrick Kidd

Hallo,
bei folgender Problemstellung komme ich gerade nicht weiter und wollte mal nach Hilfe oder einem workaround fragen:
Ich habe in einer Spalte Datumswerte, aber auch leere Felder bzw. Felder mit fehlerhaften Werten. Über ein Userformular steuere ich den Datumsfilter dahingehend, dass immer die Datensätze im relevanten Zeitraum, bspw. heute + 90 Tage angezeigt werden. Funktioniert alles.
Der Nutzer soll aber auch die Datensätze sehen, die kein gültiges Datum enthalten, da bei diesen nicht klar ist, ob sie angezeigt werden sollen oder nicht. Entsprechend alle Datensätze im Betrachtungszeitraum und alle fehlerhaften Datensätze.
Ich habe alle fehlerhaften Datensätze in ein Array geladen und gebe das als Filterkriterium mit. Funktioniert.
Das zu verknüpfen gelingt mir aber nicht. Im Makrorekroder sehe ich folgendes:
ActiveSheet.Range("$C$1:$C$1315").AutoFilter Field:=1, Criteria1:=Array( _
"blödsinn93", "blödsinn94", "blödsinn96", "blödsinn98", "blödsinn99"), Operator:= _
xlFilterValues, Criteria2:=Array(0, "11/29/2093", 1, "3/13/2091", 1, "5/14/2091", 1, "1/30/2094")
Den ersten Teil erschlage ich über mein array. Beim Datumsteil verwendet Excel jetzt auch ein Array. Das mit dem Datum in der amerikanischen Form ist klar, aber was bedeutet die führende Null, bzw. die Eins?
Ich habe versucht das Array eindimensional nachzubauen. Im debug sieht das auch genauso aus, also arrayDat(1) ist dann z.B. 0, "11/29/2093". Beim Übergeben kommt dann aber die Fehlermeldung, dass ich zu viele Argumente übergeben habe.
Fragen:
1.) Warum werden die Kriterien eigentlich nicht über XLand oder XLor verknüpft? Warum kommt nach dem Datumsarray kein Operator?
2.) Was haben die führende Null bzw. Eins für eine Bedeutung?
3.) Wie muss ich das Datumsarray aufbauen, damit es funktioniert- vielleicht zweidimensional?
4.) Gibt es einen workaround um in derselben Spalte den Datumsfilter zu verwenden und gleichzeitig alle Datensätze, die kein gültiges Datum enthalten?
Tausend Dank im Voraus!

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilter Kriterien vorgeben
27.04.2016 21:34:35
Fennek
Hallo,
Ohne Nachbau: muss nach einem Array nicht der operator 7 stehen?
Ob bei Datums-Werten wirklich das us-Format nötig ist, ist mir nicht klar, falls excel die dt. Länderenstellungen hat.
M.E. gehören isn array nur Datumswerte ohne 1 bzw 0.
Falls die Zellen ohne Datum einfach leer sind, wäre die Abfrage einfach ( so eingeben) "="
Das Thema interessiert mich, ich werde die anderen Antworten beobachten.
Mfg
Ps: in welcher Quelle hast du diesen Code gesehen?

Anzeige
AW: Autofilter Kriterien vorgeben
27.04.2016 22:39:40
Luschi
Hallo Patrick,
meine Tests mit

ActiveSheet.Range("$B$1:$B$15").AutoFilter Field:=1, Criteria1:=Array("kk1" _
, "xx2", "xx3", "xx4"), Operator:=xlFilterValues, Criteria2:=Array(0, "4/26/2016")
ergeben bei mir:
- Criteria2:=Array(0, "4/26/2016" - alle Datumswerte im Jahr 2016
- Criteria2:=Array(1, "4/26/2016" - alle Datumsangaben im Monat 04/2016
- Criteria2:=Array(2, "4/26/2016" - nur das Datum 26.04.2016
- Criteria2:=Array(1, "3/29/2016", 1, "5/1/2016") - alle Datumswerte der Monate 03 und 05/2016
Bei 0 und 1 spielt es keine Role welcher Tageswert dabei angegeben wird.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Autofilter Kriterien vorgeben
27.04.2016 23:03:00
Patrick Kidd
Hallo,
@Luschi: das ist ja schon mal ein wichtiger Hinweis. Vielen Dank! Hast Du denn auch eine Idee, wie man das Datumsarray (ein- oder zweidimensional, mit Anführungszeichen oder ohne...) betanken muss, damit es an das Kriterium 2 übergeben werden kann? Über eine Schleife möchte ich alle Daten in das Array übernehmen, die bestimmte Bedingungen erfüllen. Entsprechend brauche ich nur den Wert 2 für taggenau und dann das Datum aus meiner Spalte im Array.
@Fennek: Über den fehlenden Operator habe ich mich auch gewundert. Ich habe das mit dem Makrorekorder aufgezeichnet, um hinter die Syntax zu kommen. Nimmt man den aufgezeichneten Codeschnipsel, verarbeitet der den einwandfrei. Entsprechend sind die Operatoren zwischen den Kriterien und nach dem Datums array anscheinend nicht Pflicht.

Anzeige
AW: Autofilter Kriterien vorgeben
27.04.2016 23:17:02
Fennek
Hallo,
In xl2003 geht weder array noch Datums-Texte ohne cdate("3.4.2016")
Ich werde es morgen mit xl2016 testen.
Mfg

AW: Autofilter Kriterien vorgeben
28.04.2016 09:52:00
Fennek
Hallo Patrick,
bei einem kleinen Test kleinen Test könnte ich die Vorschläge von 'Luschi' (Klaa-Praris, FFM?) nicht nachvollziehen.
Anbei meine Liste für den Autofilter:

Kopieren
with cells(1).currentregion
.autofilter 2, "abc" 'Spalte B, Wert abc
.copy sheets(2).cells(1,1) 'alle sichtbaren Zellen MIT Überschrift
.offset(1).copy sheets(2).cells(1,1) 'alle sichtbaren Zellen OHNE Überschrift
.offset(1).entirerow.delete 'Auswahl löschen OHNE Überschrift
.autofilter 'zurücksetzen
end with
.Autofilter Field, Criteria1, Operator, Crietria2
Empty Text
.autofilter 1, "="
NOT Empty Text
.autofilter 1, "<>"
Opersator 2: xlOR
.autofilter 1, "abc", 2, "def" 'Textbeginns "abc*", Enthält NICHT: "<>abc"
Operator 7: xlFilterValues
.autofilter 1, array("abc", "def"), 7
.autofilter 1, [transpose(G1:g5)], 7
Operator 1: xlAnd
Numbers
.autofilter 1, 123
.autofilter 1, "<>123" 'NOT equal; "<123": kleiner
Operator 3: xlTop10items
Operator 4: xlBottom10Items
Operator 5: xlTop10Percent
Operator 6: xlBottom10Percent
Above Average Criteria 33, Operator 11
Below Average Criteria 34, Operator 11
Colors
Operator
8	xlFilterCellColor
9	xlFilterFontColor
12	xlFilterNoFill
13	xlFilterAutomaticFontColor
14	xlFilterNoIcon
10	xlFilterIcon, criterium No für einzelne Icon-Sets
Datum: operator 11
Tag, Criterium
1	xlFiterToday
2	xlFilteryesterday
3	xlFilterTomorrow
Woche
4	xlFilterThisWeek
5	xlFilterLastWeek
6	xlFilterNextWeek
Monat
7	xlFilterThisMonth
8	xlFilterLastMonth
9	xlFilterNextMonth
Quarter
10	xlFilterThisQuarter
11	xlFilterLastQuarter
12	xlFilterNextQuarter
Year
13	xlFilterThisYear
14	xlFilterLastYear
15	xlFilterNextYear
16	xlFilterYearToDate
Specific Month
21	January (xlFilterAllDatesInPeriodJanuary)
22	Feb
23
31	Nov
32	Dez
Zeitraum:
Anfang = DateValue("1.1.2016 09:00")
Ende = DateValue("28.2.2016 15:20")
Range.autofilter, 1, ">" & 1* Anfang, 1, "<" & 1*ende
mfg

Anzeige
AW: Autofilter Kriterien vorgeben
28.04.2016 11:11:54
Luschi
Hallo Fennek,
ich glaube wir, reden da einander vorbei. Es geht geht um folgende Datums-Filterfunktionalität:
- alle Datumswerte 2015
- alle Datumswerte der Monat April 2016 und Februar 2017
- bestimmte Einzel-Datumswerte zusätzlich: 06.05.2016, 12.07.2016,02.01.2017
Dies erreicht man mit folgendem Filterkriterion:

Criteria2:=Array(0, "1/1/2015", 1, "4/26/2016", 1, "2/5/2017", _
2, "5/6/2016", 2, "7/12/2016", 2, "1/2/2017")

Anzeige
AW: genial
28.04.2016 11:40:23
Fennek
Hallo,
Tippfaul wie ich bin, habe ich die Kurzform gewählt (autofilter 1, "abc"), aber damit klappt dein Ansatz nicht.
Wenn man 'brav' field:= usw tippt, ist es ok.
Wieder was gelernt.
Mfg

AW: Autofilter Kriterien vorgeben
29.04.2016 10:45:52
Patrick Kidd
Hallo, wenn sich die Lösung in diesen Thread verbirgt, ist sie mir entgangen. Gibt es eine Lösung?
If Year(CDate(ActiveWorkbook.Sheets("daten").Range("q" & z).Value)) = "2016" Then
ReDim Preserve arr2(0 To y)
arr2(y) = "2, " & """" & DatumFormat(ActiveWorkbook.Sheets("daten").Range("q" & z).Value) &  _
y = y + 1
End If

Dieser Schnipsel lädt beispielsweise alle Daten aus 2016 in das Array. Mit arr2(1) hätte ich dann genau die Darstellung 2,"Datum im amerikanischem Format"
Datumformat als Funktion wandelt das Datum ins amerikanische Format um. Entsprechend sieht das Array optisch exakt so aus, wie vom Makrorekorder aufgezeichnet.
Ich verstehe das im Moment so, dass das nicht funktioniert, ist das richtig?
Mit diesem Codeschnipsel lade ich die fehlerhaften Felder aus der Spalte
If Not IsDate(ActiveWorkbook.Sheets("daten").Range("q" & z).Value) Then
ReDim Preserve arr(0 To i)
arr(i) = ActiveWorkbook.Sheets("daten").Range("q" & z).Value
i = i + 1

Die Übergabe ans Array und das Setzen des Autofilters, klappt einwandfrei.
    ActiveWorkbook.Sheets("daten").Range(ActiveWorkbook.Sheets("daten").Cells(15, 7),  _
ActiveWorkbook.Sheets("daten").Cells(lzeile, lspalte)).AutoFilter , _
Field:=11, Criteria1:=Array(arr), Operator:=xlFilterValues

Mein Problem ist halt, dass ich bspw. alle fehlerhaften Daten anzeigen möchte und alle Daten bspw. zwischen heute und heute+90 Tage. Das zu kombinieren geht anscheinend nicht, da ich für die Datumsabfrage schon beide Kriterien verbrauche.

Anzeige
AW: Autofilter Kriterien vorgeben
29.04.2016 17:24:40
Fennek
Hallo,
'Luschi' hat in seinem Beitrag gezeigt, welcher autofilter alle Datumswerte des Jahres 2016 auswählt. In 'meiner' Liste gibt es auch den Code für autofilter des aktuellen Jahres.
Mfg

;
Anzeige

Infobox / Tutorial

Autofilter Kriterien vorgeben in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Datenbereich auswählen: Bestimme den Bereich, den Du filtern möchtest. Verwende ActiveSheet.Range("$C$1:$C$1315") oder eine ähnliche Referenz für Deinen Datenbereich.

  2. Filterkriterien erstellen: Lade die fehlerhaften Datensätze in ein Array. Beispiel:

    Dim arr() As Variant
    ReDim arr(0 To 0)
    ' Daten abfragen und ins Array laden
    If Not IsDate(ActiveWorkbook.Sheets("daten").Range("q" & z).Value) Then
       arr(i) = ActiveWorkbook.Sheets("daten").Range("q" & z).Value
       i = i + 1
    End If
  3. Filter anwenden: Setze den Autofilter mit den Kriterien. Beispiel:

    ActiveSheet.Range("$C$1:$C$1315").AutoFilter Field:=1, Criteria1:=Array(arr), Operator:=xlFilterValues
  4. Kombinierte Kriterien verwenden: Um sowohl Datumswerte als auch leere Felder zu filtern, kombiniere die Filterkriterien. Beispiel:

    ActiveSheet.Range("$C$1:$C$1315").AutoFilter Field:=1, Criteria1:=Array("deinDatum", "leer"), Operator:=xlFilterValues

Häufige Fehler und Lösungen

  • Fehlermeldung bei zu vielen Argumenten: Dies passiert häufig, wenn das Array nicht korrekt aufgebaut ist. Überprüfe, ob Du die Kriterien als eindimensionales oder zweidimensionales Array übergibst.

  • Operator fehlt: Bei der Verwendung von Criteria2 könnte der Operator xlAnd oder xlOr fehlen. Stelle sicher, dass Du den richtigen Operator verwendest:

    ActiveSheet.Range("$C$1:$C$1315").AutoFilter Field:=1, Criteria1:=Array("kriterium1"), Operator:=xlOr, Criteria2:=Array("kriterium2")
  • Datumsformatierung: Achte darauf, dass die Datumswerte im amerikanischen Format vorliegen, wenn Du sie in ein Array übergibst. Beispiel:

    Dim datum As String
    datum = Format(datumValue, "mm/dd/yyyy")

Alternative Methoden

  • Verwendung von UserForms: Du kannst ein UserForm erstellen, um die Filterkriterien dynamisch zu setzen. Dies ermöglicht eine benutzerfreundliche Eingabe und Anpassung der Filter.

  • VBA-Funktionen: Erstelle eigene VBA-Funktionen, um häufige Filteroperationen zu automatisieren und den Code lesbarer zu gestalten.


Praktische Beispiele

  • Beispiel für Datumsfilter: Um alle Datumswerte aus dem Jahr 2016 zu filtern:

    ActiveSheet.Range("$C$1:$C$1315").AutoFilter Field:=1, Criteria1:=Array(0, "1/1/2016", 1, "4/26/2016"), Operator:=xlFilterValues
  • Beispiel für Fehlerwerte: Um alle fehlerhaften und leeren Werte anzuzeigen:

    ActiveSheet.Range("$C$1:$C$1315").AutoFilter Field:=1, Criteria1:="=" & Chr(34) & Chr(34), Operator:=xlOr, Criteria2:=Array(arr)

Tipps für Profis

  • Verwende Criteria1:=Array(): Mit dieser Methode kannst Du mehrere Kriterien gleichzeitig angeben. Achte darauf, dass die Arrays korrekt dimensioniert sind.

  • Nutze xlFilterValues: Verwende diesen Operator, um Filter auf mehrere Werte anzuwenden, die in einem Array gespeichert sind.

  • Debugging: Nutze den Debugger in VBA, um die Werte der Arrays vor der Filteranwendung zu überprüfen. Dies hilft, Fehler schnell zu identifizieren.


FAQ: Häufige Fragen

1. Warum wird der Operator nach dem Datumsarray nicht angezeigt?
Der Operator ist möglicherweise nicht erforderlich, wenn Du nur ein Kriterium anwendest. Bei mehreren Kriterien ist es wichtig, den korrekten Operator anzugeben.

2. Was bedeuten die führende Null bzw. Eins in den Kriterien?
Die führende Null steht für alle Werte, die gleich dem angegebenen Datum sind, während die Eins für die Datumsangaben in bestimmten Zeiträumen oder Monaten steht.

3. Wie baue ich das Datumsarray korrekt auf?
Das Datumsarray muss als eindimensionales Array erstellt werden, wobei jedes Datum als String im amerikanischen Format angegeben wird.

4. Gibt es einen Workaround, um Datumsfilter und fehlerhafte Daten zu kombinieren?
Ja, es ist möglich, indem Du die Filterkriterien entsprechend anpasst und sowohl gültige Datumswerte als auch leere oder fehlerhafte Werte in einem Array kombinierst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige