Tutorial: Daten automatisch zwischen Tabellenblättern übertragen mit VBA
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:
- Erstelle zwei Tabellenblätter:
- Blatt 1: Benenne es um in
Eingabe. - Blatt 2: Benenne es um in
Archiv.
- Blatt 1: Benenne es um in
- Erstelle in beiden Blättern die gleichen Überschriften in der ersten Zeile (z. B. ID, Name, Status).
- Speichere die Datei als Excel-Arbeitsmappe mit Makros (.xlsm).
2. Den VBA-Editor öffnen
- Drücke
ALT+F11, um den VBA-Editor zu öffnen. - Gehe im Menü auf Einfügen > Modul.
- 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ü
- Gehe zurück zu Excel.
- Drücke
ALT+F8. - Wähle
DatenUebertragenaus und klicke auf Ausführen.
Methode B: Einen Button erstellen (Empfohlen)
- Gehe im Menüband auf den Reiter Entwicklertools (Falls nicht sichtbar: Rechtsklick aufs Menüband > Menüband anpassen > Entwicklertools aktivieren).
- Klicke auf Einfügen und wähle unter "Formularsteuerelemente" die Schaltfläche (Button).
- Zeichne den Button auf dein Tabellenblatt.
- Ein Fenster öffnet sich: Wähle
DatenUebertragenaus und bestätige mit OK. - 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!