Excel VBA - AutoFilter richtig einstellen?
Hallo!
ich versuche derzeit folgendes, ohne mich wirklich mit VBA auszukennen :D
Ich habe zwei Tabellen, Tabelle1 und Tabelle2. Auf Tabelle 1 habe ich mehrere Kategorie-Namen (im Beispiel die Zahlen) und möchte diese quasi "Selektieren", um damit einen Filter für meine Daten in Tabelle2 zu setzen, um dort nur die Daten zur jeweiligen gefilterten Kategorie anzuzeigen.
Zur Zeit sieht es wie folgt aus (vereinfachte Darstellung mit Zahlen als Kategorie):
Tabelle 1:
Tabelle 2 (Zahlen = Kategorie, Buchstaben = Daten):
Und mein Code
Sub Filtern()
Dim Kriterium As String Dim Counter Counter = 0
For i = 1 To 5 If Cells(i, 1) = "X" Then Kriterium = Kriterium + """" + CStr(Cells(i, 2)) + """" + "," Counter = Counter + 1 Next i
Dim Liste As Range Set Liste = Worksheets("Tabelle2").Range("A2:B10") Liste.AutoFilter Liste.AutoFilter Field:=1, Criteria1:=(Kriterium)
End Sub
Zur Erklärung was ich mir dabei gedacht habe:
In der For-Schleife gehe ich erstmal die Tabelle 1 durch und schaue, wo ein X ist und füge dann entsprechenden Kategorie-Namen aus der Zelle daneben meinem String hinzu.
Dies scheint auch zu klappen, eine Test-Ausgabe via MsgBox hat mir das Ganze so ausgegeben wie ich wollte (so: "3","5",)
Im nächsten Schritt sage ich, wo die Daten sind die zu filtern sind und wende dann "AutoFilter" an, um den Filter zu setzen. Dabei sage ich dann, dass er in Feld 1 die Kriterien suchen soll. Als Kriterium gebe ich ihm meinen vorher erstellen String, welches er als ein Array verarbeiten soll, um alle Kriterien zu berücksichtigen.
Das Ergebnis sieht allerdings nur so aus:
Ich kenne mich wie gesagt eigentlich überhaupt nicht mit VBA aus, daher wäre gut möglich, dass mein Code ein zusammengeschuhsterer Haufen Müll ist, aber naja... :D
Sieht da jemand zufällig den Fehler?
Das Problem liegt also quasi darin, dass der Filter zwar erstellt wird, aber nicht automatisch die Filter-Kriterien ausgewählt werden
3 Antworten
Hi,
Der Excel Autofilter ist ein bisschen zickig. Mehrere Filterkriterien müssen als Array übergeben werden, nicht als zusammengesetzter String.
Hier ein Lösungsvorschlag.
Sub Filtern()
Dim Criteria()
ReDim Criteria(1)
With Worksheets("Tabelle1")
For i = 1 To .[A65536].End(xlUp).Row
If .Cells(i, 1) = "x" Then
Criteria(UBound(Criteria)) = "=" + CStr(.Cells(i, 2))
ReDim Preserve Criteria(UBound(Criteria) + 1)
End If
Next i
End With
Dim Liste As Range
Set Liste = Worksheets("Tabelle2").Range("A1:B10") ' Habe in A1 und B1 Spaltenüberschriften ergänzt, um die Lesbarkeit zu verbessern
Liste.AutoFilter
Liste.AutoFilter Field:=1, Criteria1:=Criteria, Operator:=xlFilterValues
End Sub
Das Ergebnis, wenn in Tabelle1 "3" und "4" angewählt sind, sieht dann so aus:
Ich hoffe, das hilft Dir und freue mich auf Feedback.
Gruß Hannes

Ich glaube dass ein Syntaxfehler vorliegt: CHR(34) ist ein "
Kriterium = Chr(34) & "Test1" & ", " & Chr(34)& "Test2" & ", " & Chr(34)& "Test3" Chr(34)
ActiveSheet.Range("$A$1:$I$92").AutoFilter Field:=3, Criteria1:=Array(Kriterium), Operator:=xlFilterValues
Hallo,
wirklich gut auskennen mit VBA kann ich mich auch nicht aber dein Problem liegt vermutlich darin das du versuchst mehrere Werte in einer Variablen zu speichern. Also ich glaube dein Makro versucht nach ["3","5",] zu filtern.