Excel VBA: Tabellen mit ODER-Kriterien filtern
Dieses Tutorial zeigt dir, wie du mithilfe von VBA (Visual Basic for Applications) Daten in einer Excel-Tabelle (einem sogenannten ListObject) mit ODER-Verknüpfungen filtern kannst.
In Excel VBA ist die Handhabung von ODER-Filtern unterschiedlich, je nachdem, ob du innerhalb derselben Spalte oder über verschiedene Spalten hinweg filtern möchtest.
Voraussetzungen
Stelle sicher, dass deine Daten als Tabelle formatiert sind (Einfügen > Tabelle) und gib ihr einen Namen (z. B. "MeineTabelle").
Szenario 1: Mehrere Werte in derselben Spalte filtern
Dies ist der häufigste Fall. Du möchtest eine Spalte nach "Wert A" ODER "Wert B" filtern.
Der VBA-Code
Hier nutzen wir ein Array und den Operator xlFilterValues.
Sub FilterGleicheSpalteODER()
Dim lo As ListObject
Dim SpaltenIndex As Integer
' Tabelle referenzieren
Set lo = ActiveSheet.ListObjects("MeineTabelle")
' Index der Spalte, die gefiltert werden soll (z.B. Spalte 2: "Region")
SpaltenIndex = 2
' Filter setzen: Filtert nach "Nord" ODER "Süd"
lo.Range.AutoFilter Field:=SpaltenIndex, _
Criteria1:=Array("Nord", "Süd", "West"), _
Operator:=xlFilterValues
End Sub
Erklärung:
Criteria1:=Array(...): Hier listest du alle Werte auf, die angezeigt werden sollen.Operator:=xlFilterValues: Dies ist entscheidend, damit Excel weiß, dass es sich um eine Liste von Werten handelt.
Szenario 2: ODER-Logik über verschiedene Spalten hinweg
Das ist mit dem Standard-AutoFilter in VBA schwierig, da dieser mehrere Spalten normalerweise mit UND verknüpft (z.B. Region="Nord" UND Umsatz > 1000).
Um eine echte ODER-Logik über Spalten hinweg zu realisieren (z.B. Region="Nord" ODER Umsatz > 1000), gibt es zwei gängige Wege:
Methode A: Der Spezialfilter (AdvancedFilter)
Dies ist die sauberste Methode für komplexe Logik. Du benötigst einen Kriterienbereich im Arbeitsblatt.
Sub FilterMehrereSpaltenODER()
Dim lo As ListObject
Dim bereichKriterien As Range
Set lo = ActiveSheet.ListObjects("MeineTabelle")
' Definiere den Kriterienbereich (z.B. Zellen E1:F3)
' E1: "Region", F1: "Umsatz"
' E2: "Nord", F2: (leer)
' E3: (leer), F3: ">1000"
' (Werte in verschiedenen Zeilen bedeuten ODER)
Set bereichKriterien = ActiveSheet.Range("E1:F3")
' Spezialfilter anwenden
lo.Range.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=bereichKriterien
End Sub
Methode B: Die Hilfsspalten-Methode (Empfohlen für VBA-Anfänger)
Du erstellst per VBA eine temporäre Spalte, die eine Formel berechnet (WAHR/FALSCH), und filterst dann nur diese Spalte.
Sub FilterMitHilfsspalte()
Dim lo As ListObject
Set lo = ActiveSheet.ListObjects("MeineTabelle")
' 1. Hilfsspalte hinzufügen (falls nicht vorhanden)
On Error Resume Next
lo.ListColumns.Add Name:="FilterCheck"
On Error GoTo 0
' 2. ODER-Formel in die Hilfsspalte schreiben
' Beispiel: Region (Spalte 2) = "Nord" ODER Umsatz (Spalte 3) > 1000
lo.ListColumns("FilterCheck").DataBodyRange.Formula2R1C1 = _
"=OR([@Region]=""Nord"", [@Umsatz]>1000)"
' 3. Nach "TRUE" (WAHR) filtern
lo.Range.AutoFilter Field:=lo.ListColumns("FilterCheck").Index, Criteria1:="TRUE"
End Sub
Filter wieder aufheben
Um alle Filter zu löschen und wieder alle Daten anzuzeigen, nutzt du diesen kurzen Befehl:
Sub FilterLoeschen()
Dim lo As ListObject
Set lo = ActiveSheet.ListObjects("MeineTabelle")
' Prüfen, ob ein Filter aktiv ist, dann zeigen
If lo.ShowAutoFilter Then
lo.AutoFilter.ShowAllData
End If
End Sub
Zusammenfassung: Welchen Operator brauche ich?
- Gleiche Spalte, zwei Werte:
Criteria1:="A",Operator:=xlOr,Criteria2:="B" - Gleiche Spalte, mehr als zwei Werte:
Criteria1:=Array("A", "B", "C"),Operator:=xlFilterValues - Verschiedene Spalten: Nutze
AdvancedFilteroder eine Hilfsspalte mit einerODER()-Formel.
Profi-Tipp:
Wenn du mit Datumsangaben in Arrays arbeitest, achte darauf, dass Excel VBA Daten oft im US-Format (mm/dd/yyyy) erwartet, wenn sie gefiltert werden sollen. Konvertiere die Array-Elemente im Zweifelsfall mit CStr(deinDatum).