Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Autofilter mit Variable

Autofilter mit Variable
Hans
Ich möchte gerne einen Autofilter setzten lassen. Und zwar per Formular und Checkboxen. Das heißt ich habe ein Formular auf dem pro Spalte meines Excels die möglichen Werte in einer Checkbox auswählen kann.
Also z.b. 3 Spalten
1 Spalte Länder (USA, Deutschland, Frankreich)
2 Spalte Automarke (BMW, VW etc.)
Dann soll man auf dem Formula per Checkbos auswählen können nur USA & VW.
Ich habe versucht es zu programmieren, aber scheitere an der Variablen für den Autofilter.
Ich habe beides versucht, sowohl per Array, als auch durch einen String der alle Filterwerte enthält.
Hoffentlich kann mir einer helfen.
Danke Euch.
Also hier mein Versuch für die Länder.
Private Sub CommandButton1_Click()
Dim OGFilterArray As String
Dim iLoop As Integer
Anzahl = 0
If cbox1 = True Then
Anzahl = Anzahl + 1
If cbox1 = True Then LandFilterArray = """Holland"""
Landfilterall = LandFilterArray
ReDim my_array(Anzahl)
my_array(Anzahl) = "Holland"
End If
If cbox2 = True Then
Anzahl = Anzahl + 1
If Anzahl > 0 Then LandFilterArray = " ,"
Landfilterall = Lanfilterall + LandFilterArray
If cbogcht = True Then LandFilterArray = """Spanien"""
Landfilterall = Landfilterall + LandFilterArray
ReDim my_array(Anzahl)
my_array(Anzahl) = "Spanien"
End If
If cbox3 = True Then
Anzahl = Anzahl + 1
If Anzahl > 0 Then LandFilterArray = " ,"
Landfilterall = Lanfilterall + LandFilterArray
If cbogcht = True Then LandFilterArray = """Russland"""
Landfilterall = Landfilterall + LandFilterArray
ReDim my_array(Anzahl)
my_array(Anzahl) = "Russland"
End If
ActiveSheet.Range("$A$4:$AP$3009").AutoFilter Field:=5, Criteria1:=my_array
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Autofilter mit Variable
11.03.2010 23:09:31
fcs
Hallo Hans,
für Multiselektion von Einzelwerten im Autofilter unter Excel 2007 muss auch der Parameter "Operator" übergeben werden.
ActiveSheet.Range("$A$4:$AP$3009").AutoFilter Field:=5, Criteria1:=my_array, _
Operator:=xlFilterValues
Für die Syntax einer VBA-Anwesiunghilft es oft, eine Aufzeichnung per Makrorekorder durchzuführen.
Generell würde ich dir empfehlen, im Userform jeweils Listboxen mit Multiselektion für Land, Automarke, etc. zu verwenden, statt vieler einzelner Checkboxen für jede Kategorie. Das läßt sich in den VBA-Prozeduren wesentlich einfacher verarbeiten, indem man die selektierten Items der Listboxen in einer For-Next-Schleife abfragt und den ArrayVariablen für den Autofilter zuweist.
Gruß
Franz
Anzeige
AW: Autofilter mit Variable
11.03.2010 23:57:50
Hans
Danke für die Antwort, aber das löst mein Problem nicht ganz.
Wenn ich die 2 Werte per Checkbox auswähle, dann habe ich trotzdem nur einen Wert ausgewählt. Also wenn ich Deutschland und USA auswähle, nimmt er immer nur den letzten Wert.
Wenn ich den Array hart angebe, nimmt er beide Werte.
Ist meine Array Deklaration flasch?
Anzeige
AW: Autofilter mit Variable
12.03.2010 00:08:07
fcs
Hallo Hans.
deklariere die Variable auch als Feld zu Beginn der Prozedur.
Dim my_Array()
Es ist immer sinnvoll mit der Option Explicit (1. Code-Zeile im Modul) und Dim Anweisungen für alle Variablen zu arbeiten. Dann vermeidet man doch den einen oder anderen Syntax-Fehler.
Du hast vergessen in allen ReDim-Anweisungen das Preserve einzufügen, damit beim erneuten dimensionieren des Arrays die bereits vorhandenen Werte nicht gelöscht werden.
ReDim Preserve my_array(1 to Anzahl)
Gruß
Franz
Anzeige
AW: Autofilter mit Variable
12.03.2010 09:03:56
Hans
Super Danke, jetzt gehts.
VG
Hans
;
Anzeige
Anzeige

Infobox / Tutorial

Autofilter mit Variablen in VBA


Schritt-für-Schritt-Anleitung

Um einen Autofilter in Excel mit Variablen zu setzen, verwende die folgende Schritt-für-Schritt-Anleitung. Dies setzt voraus, dass du mit VBA vertraut bist und Excel 2007 oder höher verwendest.

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein UserForm hinzu: Erstelle ein neues UserForm, das Checkboxen oder Listboxen für die Auswahl deiner Filterkriterien enthält.

  3. Erstelle die Filterprozedur: Füge folgenden Code in das UserForm ein:

    Private Sub CommandButton1_Click()
       Dim my_array() As String
       Dim Anzahl As Integer
       Anzahl = 0
    
       ' Checkboxen abfragen
       If cbox1 = True Then
           Anzahl = Anzahl + 1
           ReDim Preserve my_array(1 To Anzahl)
           my_array(Anzahl) = "Holland"
       End If
       If cbox2 = True Then
           Anzahl = Anzahl + 1
           ReDim Preserve my_array(1 To Anzahl)
           my_array(Anzahl) = "Spanien"
       End If
       If cbox3 = True Then
           Anzahl = Anzahl + 1
           ReDim Preserve my_array(1 To Anzahl)
           my_array(Anzahl) = "Russland"
       End If
    
       ' Autofilter anwenden
       ActiveSheet.Range("$A$4:$AP$3009").AutoFilter Field:=5, Criteria1:=my_array, Operator:=xlFilterValues
    End Sub
  4. Testen: Schließe den VBA-Editor, gehe zurück zu Excel und teste deine Anwendung.


Häufige Fehler und Lösungen

  • Problem: Der Autofilter zeigt nur den letzten ausgewählten Wert an.

    • Lösung: Stelle sicher, dass du die Array-Variable richtig deklariert hast und ReDim Preserve verwendest, um die vorhandenen Werte zu behalten.
  • Problem: Fehlermeldung bei der Anwendung des Autofilters.

    • Lösung: Überprüfe, ob der Operator korrekt gesetzt ist. Bei mehreren Werten ist Operator:=xlFilterValues notwendig.

Alternative Methoden

Falls du eine einfachere Methode bevorzugst, kannst du auch eine Listbox im UserForm verwenden. Das ermöglicht eine einfache Mehrfachauswahl und reduziert den Codeaufwand:

  1. Listbox hinzufügen: Füge eine Listbox zum UserForm hinzu und aktiviere die Mehrfachauswahl.
  2. Code anpassen: Ändere den Code so, dass du die ausgewählten Elemente der Listbox in dein Array übergibst.
Dim i As Integer
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
        Anzahl = Anzahl + 1
        ReDim Preserve my_array(1 To Anzahl)
        my_array(Anzahl) = ListBox1.List(i)
    End If
Next i

Praktische Beispiele

Hier sind einige Beispiele für die Anwendung des VBA Autofilters mit Variablen:

  • Beispiel 1: Filtere nach Automarken (z.B. BMW, VW) und Ländern (z.B. USA, Deutschland).
  • Beispiel 2: Verwende die Checkboxen für verschiedene Kategorien, um die Daten dynamisch anzupassen.

Tipps für Profis

  • Option Explicit: Verwende Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Makrorekorder: Nutze den Makrorekorder, um die richtige Syntax zu lernen und zu überprüfen, wie VBA deine Aktionen aufzeichnet.
  • Code-Optimierung: Halte deinen Code sauber und kommentiere komplexe Abschnitte, um die Wartbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Kriterien in einer Checkbox auswählen?
Du kannst eine Schleife verwenden, um alle ausgewählten Werte der Checkboxen zu erfassen und in ein Array zu speichern.

2. Warum funktioniert mein Autofilter nicht?
Stelle sicher, dass der Operator korrekt definiert ist und dass die Filterwerte im richtigen Format vorliegen.

3. Welche Excel-Versionen unterstützen diesen VBA-Code?
Der Code funktioniert ab Excel 2007 und höher.

4. Was ist der Vorteil von ReDim Preserve?
ReDim Preserve ermöglicht es dir, die Größe eines Arrays zu ändern, ohne die bereits gespeicherten Werte zu verlieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige