Excel VBA: Tabellen mit UND-Kriterien filtern (Tutorial)
Hier ist ein ausführliches Tutorial, wie du in Excel VBA Tabellen (ListObjects) mit einer UND-Verknüpfung filtern kannst.
In Excel VBA ist das Filtern von „Intelligenten Tabellen“ (ListObjects) effizienter und robuster als das Filtern von normalen Zellbereichen. Wenn wir von einer UND-Verknüpfung sprechen, gibt es zwei Szenarien:
- UND über mehrere Spalten: (z. B. Spalte A = "Blau" UND Spalte B = "Groß").
- UND innerhalb einer Spalte: (z. B. Wert > 10 UND Wert < 50).
In diesem Tutorial lernst du beide Methoden.
1. Die Voraussetzungen
Bevor du den Code nutzt, stelle sicher, dass:
- Deine Daten als Tabelle formatiert sind (Markieren ->
Strg + T). - Du den Namen der Tabelle kennst (standardmäßig "Tabelle1", einsehbar im Reiter "Tabellenentwurf").
2. Szenario 1: Filtern über mehrere Spalten (UND-Logik)
In Excel VBA wird jedes Mal, wenn du einen weiteren AutoFilter-Befehl auf eine andere Spalte anwendest, automatisch eine UND-Verknüpfung erstellt. Es werden nur Zeilen angezeigt, die alle Kriterien erfüllen.
Der Code:
Sub MehrereSpaltenFilternUND()
Dim lo As ListObject
Set lo = ActiveSheet.ListObjects("MeineTabelle") ' Name deiner Tabelle anpassen
' Zuerst bestehende Filter löschen
If lo.ShowAutoFilter Then
lo.AutoFilter.ShowAllData
End If
' Filter setzen:
' Field:=1 entspricht der ersten Spalte der Tabelle
lo.Range.AutoFilter Field:=1, Criteria1:="Obst"
' Field:=2 entspricht der zweiten Spalte (UND-Verknüpfung erfolgt automatisch)
lo.Range.AutoFilter Field:=2, Criteria1:="Apfel"
End Sub
3. Szenario 2: Filtern innerhalb einer Spalte (Wertebereich)
Wenn du eine einzelne Spalte nach zwei Kriterien filtern willst (z. B. ein Datum zwischen X und Y oder Zahlen in einem Bereich), nutzt du den Parameter Operator:=xlAnd.
Der Code:
Sub BereichFilternUND()
Dim lo As ListObject
Set lo = ActiveSheet.ListObjects("MeineTabelle")
' Filter für Spalte 3 (z.B. Preis): Größer als 10 UND Kleiner als 50
lo.Range.AutoFilter Field:=3, _
Criteria1:=">=10", _
Operator:=xlAnd, _
Criteria2:="<=50"
End Sub
4. Schritt-für-Schritt-Anleitung zur Implementierung
- VBA-Editor öffnen: Drücke
ALT + F11. - Modul einfügen: Gehe auf
Einfügen->Modul. - Code kopieren: Kopiere eines der obigen Beispiele in das Modul.
- Titel anpassen: Ändere
"MeineTabelle"in den tatsächlichen Namen deiner Tabelle. - Ausführen: Drücke
F5oder weise das Makro einer Schaltfläche zu.
5. Wichtige Erklärungen zum Code
ListObjects("Name"): Dies spricht gezielt die intelligente Tabelle an, egal wo sie sich auf dem Blatt befindet.Field:=1: Die Nummerierung der Spalten bezieht sich immer auf die Tabelle, nicht auf das gesamte Arbeitsblatt. Wenn deine Tabelle in Spalte C beginnt, istField:=1trotzdem die Spalte C.Criteria1/Criteria2: Hier gibst du deine Suchbegriffe oder Vergleichsoperatoren (>,<,<>,=) an.Operator:=xlAnd: Dies erzwingt, dass beide Kriterien in derselben Spalte gleichzeitig wahr sein müssen.
6. Bonus: Alle Filter schnell löschen
Damit du die Tabelle per Knopfdruck wieder in den Ursprungszustand versetzen kannst, hilft dieser kurze Code:
Sub AlleFilterLoeschen()
Dim lo As ListObject
Set lo = ActiveSheet.ListObjects("MeineTabelle")
' Prüfen, ob überhaupt Filter gesetzt sind, um Fehler zu vermeiden
If lo.AutoFilter.FilterMode Then
lo.AutoFilter.ShowAllData
End If
End Sub
Zusammenfassung
Das Filtern mit UND ist in VBA der Standardzustand. Jede zusätzliche .AutoFilter-Zeile für eine neue Spalte verengt das Ergebnis weiter. Innerhalb einer Spalte nutzt du einfach Criteria1, Operator:=xlAnd und Criteria2.