Autofilter über mehrere Spalten verwenden, mittels Makro?
Hallo, folgendes Problem. Ich möchte mehrere Spalten nach einem Schlagwort aus einer Zelle Filtern. Egal in welcher Spalte das Schlagwort auftaucht, diese Zeile soll stehen bleiben.
ActiveSheet.Range("$A$14:$K$62").AutoFilter Field:=2, Criteria1:=Cells(2, 3).Value
ActiveSheet.Range("$A$14:$K$62").AutoFilter Field:=3, Criteria1:=Cells(2, 3).Value
ActiveSheet.Range("$A$14:$K$62").AutoFilter Field:=4, Criteria1:=Cells(2, 3).Value
Das war mein Versuch der aber nicht funktioniert. Es Funktioniert immer nur wenn ich den Quelltext mit nur einer Spalte verwende. Sobald ich mehrere Spalten verwende funktioniert es so nicht mehr. Außerdem sucht er mir so immer nur den direkten Wortlaut. Beispiel es steht ein Vor- und Nachname in einer Zelle und das Schlagwort beinhaltet nur den Vornamen, findet er nichts.
Hoffe es kann mir jemand helfen.
Danke!
2 Antworten
Mit dem Autofilter allein funktioniert das nicht, sobald die erste Spalte gefiltert ist, sind alle Einträge außer dem Suchbegriff weg, damit findet der Autofilter die Einträge in den anderen Spalten nicht mehr.
Du brauchst also eine Hilfsspalte dazu: Dort mit normaler Formel =ZÄHLENWENN(A1:F1;"Suchbegriff") hinterlegen.
Autofilter dann in der Hilfsspalte auf die Werte größer 0, das geht dann auch mit dem Makro
Wenn nicht nur der exakte Suchbegriff gefunden werden soll, dann mit * arbeiten.
Wenn Du direkt in VBA die Zeilen ausblenden willst (ohne Autofilter und HIlfsspalte) :
Sub tt()
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 'das ermittelt die letzte Zeile in Spalte A, d.h. das sollte die spalte sein die immer gefüllt ist
If WorksheetFunction.CountIf(Range(Cells(i, 2), Cells(i, 5)), "Such*") = 0 Then Rows(i).Hidden = True
Next
End Sub
das rückwärtszählen in der For-Schleife könnte man sich beim ausblenden sparen, wird so nur beim löschen benötigt, da durch die gelöschten Zeilen sonst das hochzählen nicht funktioniert. d.h. geht auch for i=1 to ...
Erstmal ein dickes Lob an dich, dass du dir die Mühe gemacht hast, den Makrorekorder zu betätigen!
Leider verknüpft Excel auf deine Art die Filter UND. Das bedeutet, es werden nur Zellen angezeigt, die in jeder der angegebenen Filterspalten den Wert aus C2 stehen hat.
Die erste Möglichkeit, die ich dir vorstellen möchte, ist der erweiterte Filter (Daten → Sortieren und Filtern → Erweitert)
Hier kannst du in einem gesonderten Bereich deine Filterkriterien dynamisch aufbauen (siehe Screenshot). Der VBA-Code hierfür lautet:
Range("A13:K45").AdvancedFilter Action:= _ xlFilterInPlace, CriteriaRange:= _ Range("N1:X4"), Unique:=False
Eine weitere Möglichkeit ist, in Spalte L die Spalten B, C und D zu verketten. =B14&C14&D14 und darauf den Filter "*" & Cells(2,3).Value & "*" anzuwenden.
PS: Du kannst eine ungenaue Suche durchführen, indem du Sternchen verwendest: Criteria1:="*" & Cells(2,3).Value & "*"