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

Forumthread: Autofilter mit VBA

Autofilter mit VBA
Hermann
Hallo ,
in einem früheren Beitrag habe ich das bereits archivierte Thema schon mal eröffnet, kam aber wg Umzug nicht mehr dazu mich darüm zu kümmern.
Hier nun ein erneuter Versuch diesmal hoffentlich verständlicher formulert.
Wie kann man mit VBA die Eintrage (zB. siehe unten Test1, Test2 etc.) im Autofilter der Spalte 7 nach und nach selektieren, wobei die Anzahl der Einträge variieren kann.
Selection.AutoFilter
Selection.AutoFilter Field:=7, Criteria1:="Test1"
Cells.Select
Selection.Copy
...... (hier werden weitere Aktionen mit der kopierten Selektion durchgeführt)
Selection.AutoFilter Field:=7, Criteria1:="Test2"
Cells.Select
Selection.Copy
etc...
Gruß
Hermann
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Autofilter mit VBA
02.12.2011 07:41:42
fcs
Hallo Hermann,
die Filterwerte der Spalte kann man in einer For-Next-Schleife in eine sogenannte Collection einsammeln. Durch festlegen des Key-Parameters werden alle Werte nur einmal eingelesen.
In einer 2. For-Next-Schleife werden dann die Werte der Collection als Filterwerte setzen.
Wie dann das Kopieren der jeweils gefilterten Werten optimal ausgeführt werden kann ist aus deinem Code ja nicht ersichtlich.
Ich hab es mal so eingerichtet, dass eine neu Arbeitsmappe angelegt wird und die Werte jedes Filters in ein eigenes Blatt kopiert werden.
Gruß
Franz
Sub aaTest()
Dim objRange As Range, objZelle As Range, objRangeFilter As Range
Dim wksAktiv As Worksheet, wbZiel As Workbook, wksZiel As Worksheet
Dim objCollection As New Collection, intI As Integer, boolAdd As Boolean
On Error GoTo Fehler
Set wksAktiv = ActiveSheet
'Prüfen, ob Autofilter schon aktiv
If wksAktiv.AutoFilterMode = True Then
If wksAktiv.FilterMode = True Then
wksAktiv.ShowAllData
End If
Else
Selection.AutoFilter
End If
'Autofilterbereich der aktiven Tabelle
Set objRangeFilter = wksAktiv.AutoFilter.Range
'Sortierte Liste ohne Doppelte der Werte in Spalte 7 des Autofilter-Bereichs erstellen
Set objRange = wksAktiv.AutoFilter.Range.Columns(7)
For Each objZelle In objRange.Cells
If objZelle.Row  wksAktiv.AutoFilter.Range.Row Then
If objCollection.Count = 0 Then
objCollection.Add objZelle.Value, Key:=CStr(objZelle.text)
Else
For intI = 1 To objCollection.Count
If objZelle.Value 

Anzeige
AW: Autofilter mit VBA
02.12.2011 14:45:31
Hermann
Hallo Franz,
das ist genau was ich gesucht habe !!
Beim Testen ist nun folg aufgefallen:
Bei der Anlage des 2 .Tab.blattes in der neuen Zieldatei kommt die Fehlermeldung, das bei Umbenennung des Blattnamens die Umbennung des Blattnamens unzulässig ist. Wenn ich mir die neue Zieldatei aber ansehe sind die Blätter $$Muster$$ und $$Muster$$(2) angelegt, was eigentlich nicht gegen die Blattnamenkonvention spricht.
Ferner scheint das Kopieren der Daten in die Zieldatei nicht zufunktionieren. Im 1. Blatt ($$Muster$$) stehen keine kopierten Daten.
Viele Grüße
Hermann
Anzeige
AW: Autofilter mit VBA
02.12.2011 21:23:40
fcs
Hallo Hermann,
es gibt ein paar Zeichen, die sind als Blattname nicht zulässig. Schein kommen die in Spalte 7 der Tabelle vor.
Das Blatt "$$Muster$$" wird ja zu beginn des Makros ohne Daten kreiert. Wenn das Makro ohne Fehler durchläuft, dann wird nach dem abarbeiten aller Filter wieder gelöscht.
Mit den nachfolgenden Ergänzunge sollte es funktionieren. Die unzulässigen Zeichen werden durche einen "_" ersetzt.
Gruß
Franz
Sub aaTest()
Dim objRange As Range, objZelle As Range, objRangeFilter As Range
Dim wksAktiv As Worksheet, wbZiel As Workbook, wksZiel As Worksheet
Dim objCollection As New Collection, intI As Integer, boolAdd As Boolean
On Error GoTo Fehler
Set wksAktiv = ActiveSheet
'Prüfen, ob Autofilter schon aktiv
If wksAktiv.AutoFilterMode = True Then
If wksAktiv.FilterMode = True Then
wksAktiv.ShowAllData
End If
Else
Selection.AutoFilter
End If
'Autofilterbereich der aktiven Tabelle
Set objRangeFilter = wksAktiv.AutoFilter.Range
'Sortierte Liste ohne Doppelte der Werte in Spalte 7 des Autofilter-Bereichs erstellen
Set objRange = wksAktiv.AutoFilter.Range.Columns(7)
For Each objZelle In objRange.Cells
If objZelle.Row  wksAktiv.AutoFilter.Range.Row Then
If objCollection.Count = 0 Then
objCollection.Add objZelle.Value, Key:=CStr(objZelle.text)
Else
For intI = 1 To objCollection.Count
If objZelle.Value 

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Autofilter mit VBA in Excel nutzen


Schritt-für-Schritt-Anleitung

Um den Autofilter mit VBA in Excel zu setzen, kannst du die folgenden Schritte ausführen:

  1. Öffne das VBA-Editor-Fenster: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDateiName)", gehe zu "Einfügen" und wähle "Modul".

  3. Kopiere den folgenden Code in das Modul:

    Sub SetAutofilter()
       Dim wksAktiv As Worksheet
       Set wksAktiv = ActiveSheet
    
       ' Prüfen, ob Autofilter schon aktiv ist
       If wksAktiv.AutoFilterMode = False Then
           wksAktiv.Range("A1").AutoFilter
       End If
    
       ' Autofilter setzen für Feld 7 mit einem Beispielkriterium
       wksAktiv.Range("A1").AutoFilter Field:=7, Criteria1:="Test1"
    End Sub
  4. Führe das Makro aus: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle SetAutofilter aus und klicke auf "Ausführen".

Durch diesen Code wird der Autofilter auf die Spalte 7 angewendet und die Kriterien auf "Test1" gesetzt.


Häufige Fehler und Lösungen

  • Fehler: Selection.AutoFilter gibt eine Fehlermeldung aus: Stelle sicher, dass der Autofilter auf dem Arbeitsblatt aktiv ist, bevor du diesen Befehl ausführst. Du kannst dies überprüfen, indem du If wksAktiv.AutoFilterMode = False überprüfst und den Autofilter aktivierst.

  • Blattnamen-Konventionen: Wenn du versuchst, Blätter mit ungültigen Zeichen zu benennen, wird ein Fehler angezeigt. Ersetze ungültige Zeichen durch _ in deinem Code.

  • Kopieren der Daten funktioniert nicht: Stelle sicher, dass du nach dem Setzen des Autofilters die richtige Range auswählst und kopierst. Verwende Selection.Copy nach dem Setzen des Filters.


Alternative Methoden

Eine alternative Methode zur Anwendung des Autofilters in Excel VBA ist die Verwendung einer Collection, um die Filterwerte dynamisch zu sammeln und anzuwenden. Hier ist ein Beispiel:

Sub DynamicAutofilter()
    Dim objCollection As New Collection
    Dim objRange As Range, objZelle As Range
    Dim wksAktiv As Worksheet
    Set wksAktiv = ActiveSheet

    ' Autofilter aktivieren
    If Not wksAktiv.AutoFilterMode Then
        wksAktiv.Range("A1").AutoFilter
    End If

    ' Werte sammeln
    Set objRange = wksAktiv.AutoFilter.Range.Columns(7)
    For Each objZelle In objRange.Cells
        If objZelle.Row > 1 Then ' Ignoriere Header
            objCollection.Add objZelle.Value, CStr(objZelle.Value)
        End If
    Next objZelle

    ' Filter anwenden
    Dim i As Integer
    For i = 1 To objCollection.Count
        wksAktiv.Range("A1").AutoFilter Field:=7, Criteria1:=objCollection(i)
        ' Hier kann eine Kopieraktion folgen
    Next i
End Sub

Praktische Beispiele

Hier ist ein einfaches Beispiel zur Anwendung des Autofilters in Excel VBA:

Sub ExampleFilter()
    Dim wks As Worksheet
    Set wks = ThisWorkbook.Sheets("Daten") ' Stelle sicher, dass der Blattname korrekt ist

    ' Autofilter aktivieren
    If Not wks.AutoFilterMode Then
        wks.Range("A1").AutoFilter
    End If

    ' Filter anwenden
    wks.Range("A1").AutoFilter Field:=7, Criteria1:="Test1"
    ' Weitere Aktionen können hier folgen
End Sub

Dieses Beispiel setzt den Autofilter auf die Spalte 7 und filtert nach dem Kriterium "Test1".


Tipps für Profis

  • Verwende Selection.AutoFilter: Wenn du mit einer Auswahl arbeitest, stelle sicher, dass die Auswahl korrekt ist, bevor du den Autofilter anwendest. Du kannst auch ActiveSheet anstelle von Selection verwenden, um die Lesbarkeit zu erhöhen.

  • Automatisierung durch Schleifen: Nutze Schleifen, um mehrere Filterkriterien nacheinander anzuwenden. Dies spart Zeit und Aufwand, wenn du viele Filter anwendest.

  • Fehlerbehandlung: Verwende On Error Resume Next oder On Error GoTo Fehler für eine robuste Fehlerbehandlung in deinem Code.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Kriterien für den Autofilter in VBA setzen? Du kannst die Criteria1 und Criteria2 Parameter in der AutoFilter Methode verwenden. Zum Beispiel:

wks.Range("A1").AutoFilter Field:=7, Criteria1:="Test1", Operator:=xlOr, Criteria2:="Test2"

2. Was mache ich, wenn der Autofilter nicht funktioniert? Überprüfe, ob der Autofiltermodus aktiv ist und ob die Range korrekt definiert ist. Zudem solltest du sicherstellen, dass es keine leeren Zeilen in deinem Datenbereich gibt, die den Autofilter stören könnten.

3. Wie kann ich den Autofilter zurücksetzen? Nutze wksAktiv.ShowAllData um alle Filter zu entfernen und die ursprünglichen Daten anzuzeigen.

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