Excel VBA: Tabellen mit UND-Kriterien filtern (Tutorial)

Melden

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:

  1. UND über mehrere Spalten: (z. B. Spalte A = "Blau" UND Spalte B = "Groß").
  2. 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

  1. VBA-Editor öffnen: Drücke ALT + F11.
  2. Modul einfügen: Gehe auf Einfügen -> Modul.
  3. Code kopieren: Kopiere eines der obigen Beispiele in das Modul.
  4. Titel anpassen: Ändere "MeineTabelle" in den tatsächlichen Namen deiner Tabelle.
  5. Ausführen: Drücke F5 oder 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, ist Field:=1 trotzdem 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.

0