Autofilter mit ActiveSheet.Range in Excel VBA
Schritt-für-Schritt-Anleitung
Um den Autofilter in Excel VBA mit ActiveSheet.Range zu nutzen, kannst du die folgende Vorgehensweise befolgen:
-
Öffne den Visual Basic for Applications (VBA)-Editor in Excel.
-
Füge ein neues Modul hinzu.
-
Schreibe das folgende Skript:
Sub Kopieerstellen()
Dim LoI As Long
For LoI = 101 To 199
With Sheets("Tabelle1")
.Range("$A$1:$C$8").AutoFilter Field:=3, Criteria1:=LoI
.Range("A1:C999").Copy Sheets(CStr(LoI)).Range("A1")
End With
Next LoI
End Sub
-
Stelle sicher, dass die Blätter mit den Namen 101 bis 199 existieren.
-
Führe das Skript aus. Es filtert die Daten basierend auf dem dritten Feld und kopiert die gefilterten Werte in die entsprechenden Blätter.
Häufige Fehler und Lösungen
Alternative Methoden
Falls du eine flexiblere Lösung möchtest, kannst du die Filterkriterien dynamisch gestalten, zum Beispiel indem du die Blattnamen als Kriterien verwendest:
Dim wks As Worksheet
With Worksheets("Tabelle1").Range("$A$2:$C$999")
For Each wks In Worksheets
If wks.Name <> "Tabelle1" Then
If Worksheets("Tabelle1").AutoFilterMode = True Then Worksheets("Tabelle1").ShowAllData
.AutoFilter Field:=3, Criteria1:=wks.Name
.Copy wks.Range("A2")
End If
Next
.AutoFilter
End With
Praktische Beispiele
Hier sind einige Beispiele, um den Autofilter in VBA zu verwenden:
-
Einzelnes Kriterium filtern:
Sheets("Tabelle1").Range("$A$1:$C$8").AutoFilter Field:=3, Criteria1:="101"
-
Mehrere Kriterien filtern:
Du kannst auch mehrere Kriterien angeben, indem du ein Array verwendest:
.AutoFilter Field:=3, Criteria1:=Array("101", "102"), Operator:=xlFilterValues
-
Nicht-leere Zellen filtern:
Um nicht-leere Zellen zu filtern, kannst du folgendes verwenden:
.AutoFilter Field:=3, Criteria1:="<>"
Tipps für Profis
- Verwende
ActiveSheet nur, wenn du sicher bist, dass das richtige Blatt aktiv ist. In vielen Fällen ist es besser, explizit auf das Blatt zu verweisen.
- Nutze
With-Anweisungen für klarere und kürzere Codes, um wiederholte Verweise zu vermeiden.
- Experimentiere mit verschiedenen
Criteria1-Werten, um die Flexibilität deines Codes zu erhöhen.
FAQ: Häufige Fragen
1. Was ist der Unterschied zwischen Selection.AutoFilter und ActiveSheet.Range.AutoFilter?
Selection.AutoFilter wendet den Autofilter nur auf die aktuell ausgewählte Zelle oder den ausgewählten Bereich an, während ActiveSheet.Range.AutoFilter auf einen definierten Bereich auf dem aktiven Blatt angewendet wird.
2. Wie kann ich mehrere Filter gleichzeitig anwenden?
Du kannst mehrere Filterkriterien in einem Array angeben und den Operator auf xlFilterValues setzen. Beispiel: .AutoFilter Field:=3, Criteria1:=Array("101", "102"), Operator:=xlFilterValues.
3. Was bedeutet Criteria1:="<>”?
Dieser Ausdruck filtert alle nicht-leeren Zellen im angegebenen Bereich. Es zeigt also alle Zellen an, die nicht leer sind.