Automatisches Kopieren von Daten per Spezialfilter (Advanced Filter) und VBA

Melden

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:

  1. "Daten": Hier liegen deine Rohdaten (z. B. Spalten: ID, Name, Abteilung, Umsatz).
  2. "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

  1. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Gehe im Menü auf Einfügen > Modul.
  3. 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.

  1. Doppelklicke im VBA-Editor links im Projekt-Explorer auf das Blatt "Tabelle2 (Auswertung)".
  2. Wähle oben im Dropdown-Menü statt "(Allgemein)" den Punkt "Worksheet" aus.
  3. Wähle rechts daneben das Event "Change" aus.
  4. 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 >1000 oder <01.01.2023 schreiben.

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:

  1. Keine Formeln: Dein Zielblatt bleibt klein und schnell, da keine Tausenden WENN-Formeln berechnet werden müssen.
  2. Dynamisch: Sobald du eine Abteilung in deine Kriterien tippst, erscheinen sofort die passenden Datensätze.
  3. 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!

0