Excel VBA - AutoFilter richtig einstellen?
Wie kann ich den Excel AutoFilter in VBA korrekt einstellen, um Daten basierend auf ausgewählten Kategorie-Namen aus einer anderen Tabelle anzuzeigen?
Das Problem liegt darin, dass der Filter zwar erstellt wird jedoch die Filterkriterien nicht automatisch ausgewählt werden. Eine mögliche Lösung besteht darin die gewählten Kategorie-Namen als Array an den AutoFilter zu übergeben. Hier ist der überarbeitete Code:
```vba
Sub Filtern()
Dim Kriterium As Variant
Dim Counter As Integer
Counter = 0
For i = 1 To 5
If Cells(i, 1).Value = "X" Then
Counter = Counter + 1
ReDim Preserve Kriterium(1 To Counter)
Kriterium(Counter) = Cells(i, 2).Value
End If
Next i
Dim Liste As Range
Set Liste = Worksheets("Tabelle2").Range("A2:B10")
With Liste
.AutoFilter
.AutoFilter Field:=1, Criteria1:=Kriterium, Operator:=xlFilterValues
End With
End Sub
```
In diesem aktualisierten Code werden die ausgewählten Kategorie-Namen in einem Array gespeichert und dann dem AutoFilter als Kriterien übergeben. Hierbei wurde ebenfalls der Datentyp von `Kriterium` zu `Variant` geändert um mit einem Array umgehen zu können.
Die Schleife durchläuft Tabelle 1 und überprüft, ob in der Zelle in Spalte 1 ein "X" steht. Wenn dies der Fall ist, wird der entsprechende Kategorie-Name aus der Zelle daneben dem Array hinzugefügt.
Der Bereich `Liste` wird festgelegt um die Daten in Tabelle 2 zu filtern. Dann wird der AutoFilter angewendet und das Feld 1 (Kategorie) wird als Filterfeld festgelegt. Die Filterkriterien sind das Array `Kriterium`. Der Operator `xlFilterValues` wird verwendet um die in den Kriterien enthaltenen Werte mit den Werten in der Spalte zu vergleichen und nur übereinstimmende Werte anzuzeigen.
Diese Lösung sollte den AutoFilter korrekt einstellen und die Daten in Tabelle 2 basierend auf den ausgewählten Kategorie-Namen filtern. Bitte beachten Sie – dass in Ihrem Code die Bereiche und Tabellennamen identisch angepasst werden müssen.
```vba
Sub Filtern()
Dim Kriterium As Variant
Dim Counter As Integer
Counter = 0
For i = 1 To 5
If Cells(i, 1).Value = "X" Then
Counter = Counter + 1
ReDim Preserve Kriterium(1 To Counter)
Kriterium(Counter) = Cells(i, 2).Value
End If
Next i
Dim Liste As Range
Set Liste = Worksheets("Tabelle2").Range("A2:B10")
With Liste
.AutoFilter
.AutoFilter Field:=1, Criteria1:=Kriterium, Operator:=xlFilterValues
End With
End Sub
```
In diesem aktualisierten Code werden die ausgewählten Kategorie-Namen in einem Array gespeichert und dann dem AutoFilter als Kriterien übergeben. Hierbei wurde ebenfalls der Datentyp von `Kriterium` zu `Variant` geändert um mit einem Array umgehen zu können.
Die Schleife durchläuft Tabelle 1 und überprüft, ob in der Zelle in Spalte 1 ein "X" steht. Wenn dies der Fall ist, wird der entsprechende Kategorie-Name aus der Zelle daneben dem Array hinzugefügt.
Der Bereich `Liste` wird festgelegt um die Daten in Tabelle 2 zu filtern. Dann wird der AutoFilter angewendet und das Feld 1 (Kategorie) wird als Filterfeld festgelegt. Die Filterkriterien sind das Array `Kriterium`. Der Operator `xlFilterValues` wird verwendet um die in den Kriterien enthaltenen Werte mit den Werten in der Spalte zu vergleichen und nur übereinstimmende Werte anzuzeigen.
Diese Lösung sollte den AutoFilter korrekt einstellen und die Daten in Tabelle 2 basierend auf den ausgewählten Kategorie-Namen filtern. Bitte beachten Sie – dass in Ihrem Code die Bereiche und Tabellennamen identisch angepasst werden müssen.