Tutorial: Daten automatisch zwischen Tabellenblättern übertragen mit VBA

Melden

Hier ist ein ausführliches Tutorial, wie du Daten automatisch mithilfe von VBA (Visual Basic for Applications) von einem Tabellenblatt in ein anderes übertragen kannst.


In diesem Tutorial lernst du, wie du Zeilen basierend auf einer bestimmten Bedingung (z. B. wenn ein Status auf "Erledigt" gesetzt wird) von einem Quellblatt in ein Zielblatt kopierst.

1. Vorbereitung der Excel-Datei

Bevor wir den Code schreiben, müssen wir die Umgebung vorbereiten:

  1. Erstelle zwei Tabellenblätter:
    • Blatt 1: Benenne es um in Eingabe.
    • Blatt 2: Benenne es um in Archiv.
  2. Erstelle in beiden Blättern die gleichen Überschriften in der ersten Zeile (z. B. ID, Name, Status).
  3. Speichere die Datei als Excel-Arbeitsmappe mit Makros (.xlsm).

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. Ein leeres Fenster erscheint. Hier fügen wir nun den Code ein.

3. Der VBA-Code

Kopiere den folgenden Code in das Modulfenster:

Sub DatenUebertragen()
    Dim wsQuelle As Worksheet
    Dim wsZiel As Worksheet
    Dim letzteZeileQuelle As Long
    Dim letzteZeileZiel As Long
    Dim i As Long

    ' Tabellenblätter definieren
    Set wsQuelle = ThisWorkbook.Sheets("Eingabe")
    Set wsZiel = ThisWorkbook.Sheets("Archiv")

    ' Die letzte beschriebene Zeile im Quellblatt finden (Spalte A)
    letzteZeileQuelle = wsQuelle.Cells(wsQuelle.Rows.Count, "A").End(xlUp).Row

    ' Schleife von Zeile 2 bis zur letzten Zeile
    For i = 2 To letzteZeileQuelle

        ' BEDINGUNG: Prüfen, ob in Spalte C (3) "Erledigt" steht
        If wsQuelle.Cells(i, 3).Value = "Erledigt" Then

            ' Die nächste freie Zeile im Zielblatt finden
            letzteZeileZiel = wsZiel.Cells(wsZiel.Rows.Count, "A").End(xlUp).Row + 1

            ' Die gesamte Zeile kopieren und im Zielblatt einfügen
            wsQuelle.Rows(i).Copy Destination:=wsZiel.Rows(letzteZeileZiel)

        End If
    Next i

    MsgBox "Datenübertragung erfolgreich abgeschlossen!", vbInformation
End Sub

4. Erklärung des Codes

  • letzteZeileQuelle: Dieser Befehl sucht automatisch die letzte Zeile mit Inhalt, damit das Makro weiß, wie weit es suchen muss.
  • For i = 2 To letzteZeileQuelle: Das Makro startet in Zeile 2 (da Zeile 1 die Überschrift ist) und geht jede Zeile einzeln durch.
  • If wsQuelle.Cells(i, 3).Value = "Erledigt": Hier wird geprüft, ob in der 3. Spalte (Spalte C) das Wort "Erledigt" steht. Du kannst dies an deine Bedürfnisse anpassen.
  • wsQuelle.Rows(i).Copy: Die Zeile wird kopiert und direkt an die nächste freie Stelle im Archiv-Blatt angefügt.

5. Das Makro ausführen

Du hast mehrere Möglichkeiten, das Makro zu starten:

Methode A: Über das Menü

  1. Gehe zurück zu Excel.
  2. Drücke ALT + F8.
  3. Wähle DatenUebertragen aus und klicke auf Ausführen.

Methode B: Einen Button erstellen (Empfohlen)

  1. Gehe im Menüband auf den Reiter Entwicklertools (Falls nicht sichtbar: Rechtsklick aufs Menüband > Menüband anpassen > Entwicklertools aktivieren).
  2. Klicke auf Einfügen und wähle unter "Formularsteuerelemente" die Schaltfläche (Button).
  3. Zeichne den Button auf dein Tabellenblatt.
  4. Ein Fenster öffnet sich: Wähle DatenUebertragen aus und bestätige mit OK.
  5. Jetzt kannst du das Makro mit einem Klick auf den Button starten.

6. Bonus: Zeile nach dem Kopieren löschen

Wenn du möchtest, dass die Daten nach dem Kopieren aus dem Blatt Eingabe verschwinden, füge diese Zeile direkt nach dem Kopier-Befehl ein:

wsQuelle.Rows(i).Delete
i = i - 1 ' Index korrigieren, da die Zeile gelöscht wurde

Hinweis: Wenn du Zeilen löschst, empfiehlt es sich, die Schleife rückwärts laufen zu lassen (For i = letzteZeileQuelle To 2 Step -1), damit keine Zeilen übersprungen werden.


Sicherheitshinweis

Excel-Makros können nicht rückgängig gemacht werden (STRG + Z funktioniert hier nicht). Erstelle immer eine Sicherheitskopie deiner Daten, bevor du ein neues Makro testest!

0