Excel VBA Tutorial: Daten kopieren und verschieben
Dieses Tutorial führt dich Schritt für Schritt durch die verschiedenen Methoden, um Daten mit Excel VBA zu kopieren oder zu verschieben. Wir decken alles ab – vom einfachen Kopieren innerhalb eines Blattes bis hin zum Transfer zwischen verschiedenen Arbeitsmappen.
(Innerhalb eines Blattes, in andere Blätter & Arbeitsmappen)
1. Grundlagen: Kopieren vs. Verschieben
In VBA gibt es zwei Hauptmethoden:
.Copy: Kopiert die Daten (Original bleibt erhalten)..Cut: Verschiebt die Daten (Original wird gelöscht).
Beide Methoden nutzen das Argument Destination, um das Ziel direkt anzugeben. Dies ist effizienter als die Nutzung der Zwischenablage (Copy & Paste).
2. Innerhalb eines Tabellenblatts kopieren
Dies ist die einfachste Form. Wir kopieren einen Bereich an eine andere Stelle im selben Blatt.
Sub InnerhalbBlattKopieren()
' Kopiert A1:B10 nach D1
Range("A1:B10").Copy Destination:=Range("D1")
' Zum Verschieben einfach .Cut verwenden:
' Range("A1:B10").Cut Destination:=Range("D1")
End Sub
3. Daten in ein anderes Tabellenblatt kopieren
Hier müssen wir das Quell- und das Zielblatt explizit benennen.
Sub InAnderesBlattKopieren()
Dim wsQuelle As Worksheet
Dim wsZiel As Worksheet
Set wsQuelle = ThisWorkbook.Sheets("Tabelle1")
Set wsZiel = ThisWorkbook.Sheets("Tabelle2")
' Daten kopieren
wsQuelle.Range("A1:C20").Copy Destination:=wsZiel.Range("A1")
End Sub
4. Daten in eine andere Arbeitsmappe kopieren
Damit dies funktioniert, müssen beide Arbeitsmappen geöffnet sein. Wenn die Zielmappe geschlossen ist, muss sie zuerst per Code geöffnet werden.
Sub InAndereArbeitsmappeKopieren()
Dim wbQuelle As Workbook
Dim wbZiel As Workbook
' Falls die Mappen bereits offen sind:
Set wbQuelle = ThisWorkbook
Set wbZiel = Workbooks("ZielDatei.xlsx") ' Dateiname muss stimmen
' Kopieren von Mappe A, Blatt 1 nach Mappe B, Blatt 1
wbQuelle.Sheets("Tabelle1").Range("A1:E10").Copy _
Destination:=wbZiel.Sheets("Tabelle1").Range("A1")
End Sub
5. Nur Werte kopieren (Ohne Formeln & Formate)
Oft möchte man keine Formeln kopieren, sondern nur das Ergebnis. Hier gibt es zwei Wege:
Methode A: PasteSpecial (Klassisch)
Sub NurWerteKopieren()
Range("A1:A10").Copy
Range("B1").PasteSpecial Paste:=xlPasteValues
' Auswahlmodus beenden (Ameisenkolonne entfernen)
Application.CutCopyMode = False
End Sub
Methode B: Value-Transfer (Schneller & Eleganter)
Dies ist die performanteste Methode, da sie die Zwischenablage komplett umgeht.
Sub WerteDirektZuweisen()
' Zielbereich muss exakt die gleiche Größe haben wie Quellbereich
Range("B1:B10").Value = Range("A1:A10").Value
End Sub
6. Dynamisches Kopieren (Letzte Zeile finden)
In der Praxis weiß man oft nicht, wie viele Zeilen Daten enthalten. Wir suchen daher die letzte beschriebene Zeile.
Sub DynamischKopieren()
Dim letzteZeile As Long
Dim wsQuelle As Worksheet
Set wsQuelle = ThisWorkbook.Sheets("Daten")
' Findet die letzte Zeile in Spalte A
letzteZeile = wsQuelle.Cells(wsQuelle.Rows.Count, "A").End(xlUp).Row
' Kopiert alles von A1 bis Spalte C (letzte Zeile) in ein neues Blatt
wsQuelle.Range("A1:C" & letzteZeile).Copy Destination:=Sheets("Backup").Range("A1")
End Sub
7. Best Practices & Tipps
- Application.ScreenUpdating: Schalte das Bildschirmflackern aus, um den Makro-Lauf zu beschleunigen.
Application.ScreenUpdating = False ' Dein Code... Application.ScreenUpdating = True - Referenzierung: Nutze immer
Sheets("Name")oder Variablen, anstatt dich aufActiveSheetzu verlassen. Das verhindert Fehler, wenn der User während des Makros woanders hinklickt. - Fehlerbehandlung: Wenn du in eine andere Arbeitsmappe kopierst, stelle mit einer
If-Abfrage sicher, dass diese auch wirklich offen ist.
Zusammenfassung des Codes (Cheat Sheet)
| Ziel | Befehl |
|---|---|
| Alles kopieren | Range.Copy Destination:=Range |
| Alles verschieben | Range.Cut Destination:=Range |
| Nur Werte | ZielRange.Value = QuellRange.Value |
| Letzte Zeile (Spalte A) | Cells(Rows.Count, 1).End(xlUp).Row |