Autofilter in Excel mit mehreren Kriterien verwenden
Schritt-für-Schritt-Anleitung
- Öffne Excel und lade die Datei mit den zwei Tabellen.
- Wechsle zur Tabelle1, wo sich deine Codes befinden. Diese sollten in Spalte A stehen.
- Gehe zur Tabelle2, die die längeren Zeichenfolgen in Spalte H enthält.
- Öffne den VBA-Editor (drücke
ALT + F11).
- Füge den folgenden Code ein:
Sub Mubi()
Dim rng As Range
Dim lr1 As Long, lr2 As Long
lr1 = Tabelle1.Cells(Rows.Count, "A").End(xlUp).Row
lr2 = Tabelle2.Cells(Rows.Count, "H").End(xlUp).Row
Tabelle2.Range("I1:I" & lr2) = 0
For i = 1 To lr1
Set rng = Tabelle2.Range("H2:H" & lr2).Find(Tabelle1.Cells(i, "A"), lookat:=xlPart)
If Not rng Is Nothing Then
Do
rng.Offset(, 1) = 1
Set rng = Tabelle2.Range("H2:H" & lr2).FindNext(rng)
Loop Until rng Is Nothing
End If
Next i
End Sub
- Schließe den VBA-Editor und führe das Makro aus.
Dieser Code überprüft die Codes in Tabelle1 und setzt in Tabelle2 Spalte I eine 1, wenn der Code in der Zeichenfolge in Spalte H gefunden wird.
Häufige Fehler und Lösungen
- Laufzeitfehler 424: Dies kann auftreten, wenn ein Objekt nicht korrekt definiert ist. Stelle sicher, dass die Arbeitsblätter korrekt benannt sind.
- Laufzeitfehler 13 (Typen unverträglich): Überprüfe, ob die Variablen korrekt deklariert sind, insbesondere wenn du Arrays verwendest.
Um den Fehler zu beheben, stelle sicher, dass du den Code wie folgt anpasst:
Dim Ar As Variant
Ar = Application.Transpose(Quelle.Range("A1:A180"))
- AutoFilter findet keine Werte: Stelle sicher, dass die Filterkriterien korrekt gesetzt sind. Wenn du mehrere Kriterien prüfen möchtest, könnte der Filter wie folgt aussehen:
.Range("A1:I1").AutoFilter Field:=9, Criteria1:=Array("=*" & Ar & "*"), Operator:=xlFilterValues
Alternative Methoden
Falls du den Excel Autofilter nicht verwenden möchtest, kannst du die Excel Filter Funktion verwenden:
=FILTER(Tabelle2!H:H, ISNUMBER(SEARCH(Tabelle1!A1, Tabelle2!H:H)))
Diese Funktion filtert die Werte in Tabelle2 basierend auf den Kriterien aus Tabelle1.
Praktische Beispiele
- Autofilter mit VBA:
Sub TestAutoFilter()
Dim ws As Worksheet
Set ws = Worksheets("Tabelle2")
With ws
.AutoFilterMode = False
.Range("A1:I1").AutoFilter
.Range("A1:I1").AutoFilter Field:=9, Criteria1:=Array("*RM7*", "*X5G*", "*R92*"), Operator:=xlFilterValues
End With
End Sub
- Verwendung von Access VBA für mehrere Kriterien:
Falls du Access VBA verwendest, kannst du den Filter mit mehreren Kriterien wie folgt setzen:
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM Tabelle2 WHERE FieldName IN ('RM7', 'X5G', 'R92')")
Tipps für Profis
- Verwende Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert werden müssen.
- Optimiere die Suche in langen Datensträngen, indem du Range.Find verwendest, was bei großen Datenmengen deutlich schneller ist.
- Halte deine Codes gut kommentiert, damit du und andere Benutzer die Logik leichter nachvollziehen können.
FAQ: Häufige Fragen
1. Wie viele Kriterien kann ich im Autofilter verwenden?
In Excel kannst du mit dem Autofilter mehrere Kriterien verwenden, jedoch ist die Anzahl der Kriterien begrenzt. Bei komplexeren Anforderungen ist eine VBA-Lösung oft effektiver.
2. Warum funktioniert mein VBA-Code nicht?
Überprüfe die Namen der Worksheets und stelle sicher, dass sie korrekt im Code referenziert sind. Achte auch auf mögliche Typkonflikte bei der Verwendung von Arrays.
3. Was tun, wenn der Filter kein Ergebnis liefert?
Stelle sicher, dass die Filterkriterien korrekt formuliert sind. Manchmal kann auch die Formatierung der Zellen ein Problem darstellen.