Excel VBA: Daten kopieren und einfügen – Das ultimative Tutorial

Melden

Hier ist ein umfassendes Tutorial, wie du Daten in Excel mit VBA (Visual Basic for Applications) kopieren und einfügen kannst – von den Grundlagen bis hin zu fortgeschrittenen Techniken.


Das Automatisieren von Kopier- und Einfügevorgängen gehört zu den am häufigsten genutzten Funktionen in Excel VBA. In diesem Tutorial lernst du die verschiedenen Methoden kennen, um effizienten und sauberen Code zu schreiben.

1. Vorbereitung: Den VBA-Editor öffnen

Bevor du startest, musst du den VBA-Editor öffnen:

  1. Drücke ALT + F11 in Excel.
  2. Gehe auf Einfügen > Modul.
  3. Hier kannst du deinen Code hineinschreiben.

2. Die einfachste Methode: Kopieren und Ziel direkt angeben

Die effizienteste Art zu kopieren, ohne den "Umweg" über die Zwischenablage und ohne das Blatt zu wechseln, ist die Verwendung des Destination-Arguments.

Sub EinfachesKopieren()
    ' Kopiert Zelle A1 nach B1
    Range("A1").Copy Destination:=Range("B1")

    ' Kopiert einen Bereich A1:A10 nach C1
    Range("A1:A10").Copy Destination:=Range("C1")
End Sub

Vorteil: Schnell und sauber, da keine Zellen markiert werden müssen (Select).


3. Die klassische Methode (wie der Makro-Rekorder)

Wenn du ein Makro aufzeichnest, sieht der Code oft so aus. Er ist langsamer, aber gut zu verstehen, da er die manuellen Schritte imitiert.

Sub KlassischesKopieren()
    Range("A1").Select
    Selection.Copy

    Range("B1").Select
    ActiveSheet.Paste

    ' Wichtig: Den "Ameisenlauf" (Markierung) um die kopierte Zelle entfernen
    Application.CutCopyMode = False
End Sub

4. Nur Werte einfügen (PasteSpecial)

Oft möchte man keine Formeln oder Formatierungen kopieren, sondern nur das Ergebnis (die Werte). Hierfür nutzt man PasteSpecial.

Sub NurWerteEinfuegen()
    Range("A1:A10").Copy

    ' Nur die Werte in Spalte E einfügen
    Range("E1").PasteSpecial Paste:=xlPasteValues

    ' Zwischenablage leeren
    Application.CutCopyMode = False
End Sub

Weitere Optionen für Paste sind: xlPasteFormats (nur Formate), xlPasteFormulas (nur Formeln).


5. Kopieren zwischen verschiedenen Tabellenblättern

Um Daten von einem Blatt in ein anderes zu kopieren, solltest du die Blätter explizit benennen.

Sub ZwischenBlaetternKopieren()
    Dim wsQuelle As Worksheet
    Dim wsZiel As Worksheet

    Set wsQuelle = ThisWorkbook.Worksheets("Tabelle1")
    Set wsZiel = ThisWorkbook.Worksheets("Tabelle2")

    ' Kopiert von Tabelle1 nach Tabelle2
    wsQuelle.Range("A1:B10").Copy Destination:=wsZiel.Range("A1")
End Sub

6. Kopieren in die nächste freie Zeile

Ein sehr häufiger Anwendungsfall: Daten ans Ende einer Liste anfügen.

Sub InLetzteZeileKopieren()
    Dim letzteZeile As Long

    ' Findet die nächste freie Zeile in Spalte A des Zielblatts
    letzteZeile = Sheets("Tabelle2").Cells(Rows.Count, "A").End(xlUp).Row + 1

    ' Kopiert Bereich von Tabelle1 ans Ende von Tabelle2
    Sheets("Tabelle1").Range("A1:B1").Copy Destination:=Sheets("Tabelle2").Range("A" & letzteZeile)
End Sub

7. Profi-Tipp: Kopieren ohne Copy-Befehl (Value = Value)

Wenn du nur Werte übertragen willst und keine Formatierung brauchst, ist dies der schnellste Weg. Man "setzt" den Wert des Zielbereichs einfach gleich dem Wert des Quellbereichs.

Sub TurboKopieren()
    ' Der Zielbereich muss dieselbe Größe haben wie der Quellbereich!
    Range("C1:C10").Value = Range("A1:A10").Value
End Sub

Zusammenfassung: Was du beachten solltest

  1. Vermeide .Select: Es macht das Makro langsam und fehleranfällig. Referenziere Zellen direkt über Range oder Cells.
  2. Application.CutCopyMode = False: Nutze diesen Befehl nach jedem Copy/Paste-Vorgang (außer bei der Direktmethode), um die Zwischenablage zu leeren und den Speicher zu schonen.
  3. Explizite Referenzierung: Nutze immer Worksheets("Name"), damit VBA genau weiß, woher die Daten kommen, auch wenn gerade ein anderes Blatt aktiv ist.

Viel Erfolg beim Automatisieren deiner Excel-Tabellen!

0