Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Mehrere Autofilter in Tabelle mit VBA

Mehrere Autofilter in Tabelle mit VBA
03.09.2018 17:27:16
Martin
Hallo liebe Excel-Experten,
ich möchte eine Tabelle mit VBA filtern.
Zuerst soll eine feste Spalte nach Kriterien gefiltert werden, die durch ein Dropdown-Menü vorgegeben sind. Das habe ich durch das durchforsten vieler Foren und Videoanleitungen hinbekommen.
Ein zweites Dropdown-Menü soll die Tabelle bzw. die durch das erste Dropdown-Menü herausgefilterten Zeilen erneut filtern. Hierbei wird aber durch das Dropdown-Menü die zu filternde Spalte bzw. deren Header vorgegeben, das Filterkriterium ist fest (enthält"yes").
Außerdem habe ich noch einen Button zum Zurücksetzen der Filter angelegt.
Solange ich statt dem zweiten Dropdown-Menü die zu filternde Spalte fest im Code vorgebe, funktioniert alles einwandfrei, sobald ich versuche, die zu filternde Spalte durch den im Dropdown erscheinenden Wert zu bestimmen, bekomme ich eine Fehlermeldung.
Kann mir hier jemand helfen?
Hier der bisherige Code:
Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$D$6" Then
Dim ws As Worksheet
Dim lst As ListObject
Dim iCol As Long
Dim iCol3 As Long
Set ws = ThisWorkbook.Worksheets(1)
Set lst = ws.ListObjects(1)
iCol = lst.ListColumns("Product Function").Index
lst.Range.AutoFilter Field:=iCol, Criteria1:=ws.Range("Drop_Down_Product_Function")
End If
If Target.Address = "$D$9" Then
iCol2 = ws.Range("Drop_Down_Ecolabel")
iCol3 = lst.ListColumns(iCol2).Index
lst.Range.AutoFilter Field:=iCol3, Criteria1:="*yes*"
End If
End Sub

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Autofilter in Tabelle mit VBA
04.09.2018 17:36:44
Martin
Hi,
ich hab die Antwort inzwischen in einem anderen Forum gefunden, ich hatte das leere Dropdown nicht berücksichtigt:
Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim ws As Worksheet
Dim lst As ListObject
Dim iCol As Long
Dim Filter2 As String
Set ws = ThisWorkbook.Worksheets(1)
Set lst = ws.ListObjects(1)
If Target.Address = "$D$6" Then
iCol = lst.ListColumns("Product Function").Index
lst.Range.AutoFilter Field:=iCol, Criteria1:=ws.Range("Drop_Down_Product_Function")
End If
If Target.Address = "$D$9" Then
Filter2 = ws.Range("D9").Value
If Filter2  "" Then
iCol3 = lst.ListColumns(Filter2).Index
lst.Range.AutoFilter Field:=iCol3, Criteria1:="*yes*"
End If
End If
End Sub
Trotzdem danke für die Tips die mich auch dank Eures Forums bis zum ersten Schritt gebracht haben,
Martin
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Mehrere Autofilter in Excel mit VBA anwenden


Schritt-für-Schritt-Anleitung

  1. Dropdown-Menü für die erste Filterung erstellen:

    • Erstelle in deiner Excel-Tabelle ein Dropdown-Menü in Zelle D6, das die Kriterien für die erste Filterung enthält.
  2. Dropdown-Menü für die zweite Filterung erstellen:

    • Füge ein weiteres Dropdown-Menü in Zelle D9 hinzu, um die zu filternde Spalte auszuwählen.
  3. VBA-Code einfügen:

    • Öffne den VBA-Editor (ALT + F11) und wähle das entsprechende Tabellenblatt aus.
    • Füge den folgenden Code ein:
    Sub Worksheet_Change(ByVal Target As Excel.Range)
       Dim ws As Worksheet
       Dim lst As ListObject
       Dim iCol As Long
       Dim Filter2 As String
       Set ws = ThisWorkbook.Worksheets(1)
       Set lst = ws.ListObjects(1)
    
       If Target.Address = "$D$6" Then
           iCol = lst.ListColumns("Product Function").Index
           lst.Range.AutoFilter Field:=iCol, Criteria1:=ws.Range("Drop_Down_Product_Function")
       End If
    
       If Target.Address = "$D$9" Then
           Filter2 = ws.Range("D9").Value
           If Filter2 <> "" Then
               iCol3 = lst.ListColumns(Filter2).Index
               lst.Range.AutoFilter Field:=iCol3, Criteria1:="*yes*"
           End If
       End If
    End Sub
  4. Filter zurücksetzen:

    • Du kannst einen Button hinzufügen, um alle Filter zurückzusetzen, indem du den Filter auf die gesamte Tabelle anwendest.

Häufige Fehler und Lösungen

  • Fehler: Kein Dropdown-Wert ausgewählt:

    • Stelle sicher, dass dein zweites Dropdown-Menü (D9) einen gültigen Wert enthält, bevor der Filter angewendet wird. Der aktualisierte Code berücksichtigt dies.
  • Fehler: Spalte nicht gefunden:

    • Wenn die Spalte, die du filtern möchtest, im Dropdown nicht vorhanden ist, kann der Fehler "Spalte nicht gefunden" auftreten. Überprüfe die Schreibweise und die Verfügbarkeit der Spalte im ListObject.

Alternative Methoden

  • Daten filtern ohne VBA:

    • Du kannst die Filterfunktion in Excel nutzen, um Daten manuell zu filtern, ohne VBA zu verwenden. Dies ist besonders nützlich, wenn du nur einfache Filterungen benötigst.
  • Verwendung von Pivot-Tabellen:

    • Eine Pivot-Tabelle kann dir helfen, Daten dynamisch zu filtern und zu sortieren. Sie bietet eine visuelle Möglichkeit, mit großen Datenmengen zu arbeiten.

Praktische Beispiele

  • Beispiel für Dropdown-Filter:

    • Angenommen, du hast eine Tabelle mit den Spalten "Product Function", "Ecolabel" und "Price". Du könntest das Dropdown in D6 auf verschiedene "Product Functions" einstellen und in D9 "Ecolabel" auswählen, um nur Produkte mit einem bestimmten Ecolabel anzuzeigen.
  • Wenn mehrere Spalten gefiltert werden sollen:

    • Du kannst den Code erweitern, um mehrere Spalten gleichzeitig zu filtern, indem du weitere Dropdown-Menüs hinzufügst und die entsprechenden Filterkriterien anpasst.

Tipps für Profis

  • Verwendung von dynamischen Bereichen:

    • Stelle sicher, dass deine Dropdown-Listen dynamisch sind, damit sie sich automatisch aktualisieren, wenn neue Daten hinzugefügt werden.
  • Debugging im VBA:

    • Nutze die Debugging-Tools im VBA-Editor, um deinen Code zu testen und Fehler schnell zu identifizieren.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Autofilter gleichzeitig anwenden?
Du kannst mehrere Dropdown-Menüs erstellen und jeweils den entsprechenden Filter im VBA-Code anpassen. Achte darauf, dass die Filter nicht miteinander in Konflikt stehen.

2. Was mache ich, wenn mein Dropdown-Menü leer ist?
Überprüfe, ob du im Dropdown-Menü einen Wert ausgewählt hast, bevor du den Filter anwendest. Der aktualisierte VBA-Code behandelt leere Dropdowns bereits.

3. Wie kann ich die Filter zurücksetzen?
Füge einen Button hinzu, der den Filter auf die gesamte Tabelle anwendet. Du kannst den Befehl lst.AutoFilter.ShowAllData verwenden, um alle Filter zu entfernen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige