Autofilter über mehrere Spalten verwenden, mittels Makro?

...komplette Frage anzeigen

2 Antworten

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 & "*"

Erweierten Filter für Oder-Verknüpfung verwenden - (Excel, makro)
Antwort bewerten Vielen Dank für Deine Bewertung

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 ...

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?