Automatisches Kopieren von Daten per Spezialfilter (Advanced Filter) und VBA
In diesem Tutorial lernst du, wie du Daten basierend auf bestimmten Kriterien automatisch von einem Tabellenblatt in ein anderes kopierst. Wir nutzen dafür den Spezialfilter (Advanced Filter) in Kombination mit ein wenig VBA, um den Prozess zu automatisieren.
Warum der Spezialfilter mit VBA?
Der normale Filter blendet Zeilen nur aus. Der Spezialfilter hingegen kann Daten extrahieren und an einen anderen Ort kopieren. Mit VBA sorgen wir dafür, dass dies jedes Mal passiert, wenn du deine Filterkriterien änderst – ohne manuelles Klicken.
Schritt 1: Die Tabellenstruktur vorbereiten
Wir benötigen zwei Tabellenblätter:
- "Daten": Hier liegen deine Rohdaten (z. B. Spalten: ID, Name, Abteilung, Umsatz).
- "Auswertung": Hier geben wir die Kriterien ein und hier erscheinen die Ergebnisse.
Wichtig: Die Spaltenüberschriften im Zielblatt müssen exakt so geschrieben sein wie im Quellblatt.
Aufbau im Blatt "Auswertung":
- Bereich A1:D2: Dein Kriterienbereich (Überschriften in Zeile 1, Suchbegriffe in Zeile 2).
- Bereich A5 (oder tiefer): Hier sollen die Ergebnisse starten (kopiere die Überschriften auch hierher).
Schritt 2: Den VBA-Editor öffnen
- Drücke
ALT + F11, um den VBA-Editor zu öffnen. - Gehe im Menü auf Einfügen > Modul.
- Kopiere den folgenden Code in das neue Modul:
Sub FilterKopieren()
Dim wsQuelle As Worksheet
Dim wsZiel As Worksheet
Dim quellBereich As Range
Dim kriterienBereich As Range
Dim zielBereich As Range
' Tabellenblätter zuweisen
Set wsQuelle = ThisWorkbook.Sheets("Daten")
Set wsZiel = ThisWorkbook.Sheets("Auswertung")
' 1. Vorherige Ergebnisse löschen (ab Zeile 6, um Überschriften in Zeile 5 zu behalten)
' Wir löschen alles unterhalb der Ergebnis-Überschriften
wsZiel.Rows("6:100000").ClearContents
' 2. Bereiche definieren
' Die gesamte Datentabelle (CurrentRegion nimmt alle zusammenhängenden Daten)
Set quellBereich = wsQuelle.Range("A1").CurrentRegion
' Der Bereich, in dem deine Suchkriterien stehen (z.B. A1 bis D2)
Set kriterienBereich = wsZiel.Range("A1:D2")
' Die Überschriften, unter denen die Daten eingefügt werden sollen
Set zielBereich = wsZiel.Range("A5:D5")
' 3. Den Spezialfilter ausführen
quellBereich.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=kriterienBereich, _
CopyToRange:=zielBereich, _
Unique:=False
MsgBox "Daten wurden gefiltert und kopiert!", vbInformation
End Sub
Schritt 3: Automatisierung (Live-Update)
Damit du das Makro nicht jedes Mal manuell starten musst, verknüpfen wir es mit einer Änderung im Kriterienbereich.
- Doppelklicke im VBA-Editor links im Projekt-Explorer auf das Blatt "Tabelle2 (Auswertung)".
- Wähle oben im Dropdown-Menü statt "(Allgemein)" den Punkt "Worksheet" aus.
- Wähle rechts daneben das Event "Change" aus.
- Nutze diesen Code:
Private Sub Worksheet_Change(ByVal Target As Range)
' Nur ausführen, wenn sich etwas im Kriterienbereich (A2:D2) ändert
If Not Intersect(Target, Range("A2:D2")) Is Nothing Then
' Ruft unser Makro auf
Call FilterKopieren
End If
End Sub
Schritt 4: Funktionsweise des Spezialfilters
Der Spezialfilter in Excel ist sehr mächtig:
- Leeres Feld: Wird als "Zeige alles" interpretiert.
- Text: Sucht nach genauer Übereinstimmung (oder "Text*" für beginnt mit).
- Zahlenvergleiche: Du kannst in die Kriterienfelder auch
>1000oder<01.01.2023schreiben.
Schritt 5: Datei speichern
Damit das Makro erhalten bleibt, musst du die Excel-Datei unbedingt als Excel-Arbeitsmappe mit Makros (.xlsm) speichern.
Zusammenfassung der Vorteile:
- Keine Formeln: Dein Zielblatt bleibt klein und schnell, da keine Tausenden
WENN-Formeln berechnet werden müssen. - Dynamisch: Sobald du eine Abteilung in deine Kriterien tippst, erscheinen sofort die passenden Datensätze.
- Sauber: Es werden nur die Daten kopiert, die du wirklich brauchst, ohne ausgeblendete Zeilen.
Tipp: Wenn du nur bestimmte Spalten extrahieren willst (z.B. nur Name und Umsatz, aber nicht die ID), schreibe im Zielbereich (A5:B5) einfach nur diese zwei Überschriften hin. Der Spezialfilter erkennt das automatisch!