Kurzfassung —
src.Copy Destination:=dstkopiert einen Bereich in einer einzigen Anweisung direkt zu seinem Ziel. Die Zwischenablage wird nie berührt, also kann nichts sie mitten im Lauf beschädigen, es gibt keinen Laufrahmen zu löschen, und kein.Selectbremst irgendetwas aus. Es trägt die ganze Zelle — Wert, Formel und Format. Wollen Sie nur Werte, istdst.Value = src.Valuenoch direkter. Heben Sie sich die Zwischenablage (PasteSpecial) für den Fall auf, dass Sie eine einzelne Schicht oder eine Operation brauchen.
' Eine Anweisung, keine Zwischenablage, kein Select:
Range("A1:C100").Copy Destination:=Sheet2.Range("A1")
' Nur Werte, noch direkter (keine Formate, keine Formeln):
Sheet2.Range("A1:C100").Value = Range("A1:C100").Value
Öffnen Sie irgendein aufgezeichnetes Makro, und Sie finden dieselben drei Zeilen: Range(...).Select,
Selection.Copy, dann ActiveSheet.Paste. Das ist der Makrorekorder, der getreu aufschreibt, was ein
Mensch tut — klicken, kopieren, klicken, einfügen —, geleitet durch die Windows-Zwischenablage. Ihr Code
braucht nichts davon. Er hält bereits Verweise auf beide Bereiche, kann Daten also direkt von einem zum
anderen bewegen. Copy Destination ist das Wie, und es ist die größte Aufräumaktion, die Sie an
aufgezeichnetem Copy Paste-Code vornehmen können.
Was Sie lernen
- Das Denkmodell — Ihr Code hält bereits beide Bereiche, braucht also keinen Zwischenablage-Mittelsmann
- Die eine Regel, die aufgezeichnete Makros repariert —
.Selectweglassen und direkt zu einemDestinationkopieren - Die Regel der oberen linken Zelle —
Destinationbraucht nur die erste Zelle des Ziels - Was eine vollständige
Copy Destinationmitbringt im Vergleich zudst.Value = src.Value - Über Blätter und Arbeitsmappen hinweg kopieren mit einem vollständig qualifizierten
Destination - Wann Sie die Zwischenablage wirklich noch brauchen
Das Denkmodell: eine direkte Bewegung, ganz ohne Mittelsmann
Wenn Sie kopieren und einfügen, ist die Zwischenablage eine Zwischenstation — Sie kopieren hier, bewegen die Hände, fügen dort ein. Der Rekorder zeichnet diese Handbewegungen auf, weshalb aufgezeichneter Code ständig etwas auswählt und aktiviert. Aber VBA ist kein Händepaar. Es hat bereits einen direkten Verweis auf den Quellbereich und einen direkten Verweis auf das Ziel, kann die Daten also ohne Zwischenstation hinüberreichen.
Copy Destination ist genau diese direkte Übergabe, geschrieben als eine Zeile:
source.Copy Destination:=target. Es gibt keinen Zwischenablage-Schritt, der scheitern kann, keine
Auswahl, von der etwas abhängt, kein Bildschirmflackern, während der Cursor herumspringt. Sobald Sie
Kopieren als das Bewegen von Daten zwischen zwei Verweisen, die Sie bereits halten verstehen, sieht die
Zwischenablage-Variante genau danach aus, was sie ist — die Übersetzung einer manuellen Gewohnheit, die
Ihr Code nie hatte.
Die wichtigste Regel: Select und die Zwischenablage überspringen
Hier ist, warum es sich lohnt, das aufgezeichnete Muster zu ersetzen und nicht nur aufzuräumen.
Range("A1:A10").Copy, dann Range("C1").Select, dann ActiveSheet.Paste ist langsam, fragil und vom
Fokus abhängig:
' Aufgezeichnet - langsam, fragil, abhaengig davon, was ausgewaehlt und aktiv ist:
Range("A1:A10").Copy
Range("C1").Select
ActiveSheet.Paste
' Direkt - eine Zeile, keine Zwischenablage, keine Auswahl:
Range("A1:A10").Copy Destination:=Range("C1")
Die aufgezeichnete Variante zeichnet den Bildschirm bei jedem .Select neu, sie bricht, wenn das falsche
Blatt aktiv ist, und ihre Zwischenablage kann durch ein versehentliches Strg+C, eine MsgBox oder einen
Fokusverlust von Excel zwischen Kopieren und Einfügen geleert werden. Die direkte Variante hat keinen
dieser Fehlermodi, weil es nichts gibt, das den Fokus verlieren könnte, und nichts auf der Zwischenablage,
das beschädigt werden könnte. Löschen Sie jedes .Select und .Activate, das ein Rekorder geschrieben
hat, und kopieren Sie direkt zu einem Destination — das ist schneller und lässt sich nicht
unterbrechen.
Die Regel der oberen linken Zelle: Destination passt sich selbst an
Eine verbreitete Sorge ist, dass das Ziel exakt so groß sein muss wie die Quelle. Bei Copy Destination
stimmt das nicht: Sie geben Excel die obere linke Zelle des Ziels, und Excel füllt den Rest passend zur
Form der Quelle auf:
Range("A1:C100").Copy Destination:=Sheet2.Range("A1") ' nur A1 - fuellt A1:C100 fuer Sie auf
Eine einzelne Zelle zu übergeben ist die Norm und die sicherste Wahl. Übergeben Sie tatsächlich ein
mehrzelliges Destination, muss es ein ganzzahliges Vielfaches der Quelle sein (Excel kachelt die Kopie
hinein), sonst erhalten Sie einen Laufzeitfehler — nennen Sie also, außer Sie wollen gezielt kacheln, nur
die erste Zelle. Das ist das Gegenteil der Werte-Abkürzung weiter unten, bei der die beiden Bereiche in
der Größe übereinstimmen müssen.
Was Copy Destination mitbringt — und was Value = Value mitbringt
Die beiden direkten Methoden bewegen unterschiedliche Dinge, und die Wahl zwischen ihnen ist die ganze Aufgabe:
src.Copy Destination:=dstist eine vollständige Kopie — Werte, Formeln, Zahlenformate, Rahmen, Füllungen, alles. Es ist der direkte Ersatz für einen einfachen aufgezeichneten Einfügevorgang.dst.Value = src.Valuebewegt nur Werte — keine Formeln (Ergebnisse werden als Zahlen eingefügt), keine Formate. Es ist schneller, kann nicht unterbrochen werden, und die beiden Bereiche müssen gleich groß sein.
Die Entscheidung lautet also: Brauche ich Formatierung und Formeln mit dabei? Nutzen Sie
Copy Destination. Will ich nur die Zahlen, und wären mir die Quellformeln lieber als eingefrorene
Ergebnisse? Nutzen Sie .Value = .Value (dieses Einfrieren ist das Thema von
Paste Values). Beide überspringen die Zwischenablage; sie unterscheiden sich
nur darin, was überquert.
Über Blätter und Arbeitsmappen hinweg kopieren
Destination ist einfach ein Bereich, kann also auf jedem Blatt oder in jeder geöffneten Arbeitsmappe
liegen — qualifizieren Sie ihn vollständig, und die Kopie geht dorthin, wohin Sie zeigen:
' Ueber Blaetter hinweg - keines der beiden muss aktiviert werden:
ThisWorkbook.Worksheets("Data").Range("A1:D50").Copy _
Destination:=ThisWorkbook.Worksheets("Report").Range("A1")
' In eine andere geoeffnete Arbeitsmappe:
Range("A1:D50").Copy Destination:=Workbooks("Summary.xlsx").Worksheets("Sheet1").Range("A1")
Weil nichts ausgewählt oder aktiviert wird, können Quell- und Zielblatt beide im Hintergrund bleiben — die Kopie stört nicht, was der Benutzer gerade betrachtet. Beide Enden vollständig zu qualifizieren (Arbeitsmappe, Blatt, Bereich) ist die Gewohnheit, die eine Kopie funktionieren lässt, egal welches Blatt gerade aktiv ist, wenn das Makro läuft.
Wann Sie die Zwischenablage noch brauchen
Die direkten Methoden decken die häufigen Fälle ab — eine vollständige Kopie oder eine reine
Werte-Bewegung. Die Zwischenablage brauchen Sie noch für einen gefilterten Einfügevorgang: nur Werte
mit Formaten, aber ohne Formeln, nur Formate, nur Spaltenbreiten, oder eine Operation wie transponieren
oder addieren. Genau dafür gibt es PasteSpecial, und dort müssen .Copy und
.PasteSpecial direkt nebeneinander bleiben. Die Faustregel: Setzen Sie standardmäßig auf
Copy Destination für eine vollständige Kopie und auf .Value = .Value für Werte, und greifen Sie nur
dann zur Zwischenablage, wenn Sie eine einzelne Schicht oder eine Operation brauchen, die die direkten
Methoden nicht ausdrücken können.
Wie ExcelMaster hilft
Die meisten aufgezeichneten Makros sind langsamer und fragiler, als sie sein müssten, aus einem Grund: Sie
kopieren und fügen über die Zwischenablage mit einer Spur von .Select-Zeilen ein, obwohl die Daten
direkt hinüberbewegt werden könnten. Es funktioniert, bis mitten im Lauf ein Strg+C landet oder das
falsche Blatt aktiv ist — dann fügt es das Falsche ein oder bricht mit einem Fehler ab.
ExcelMaster schreibt von
Anfang an die direkte Variante — Copy Destination:= für eine vollständige Kopie,
dst.Value = src.Value, wenn Sie nur Werte brauchen, beide Enden vollständig qualifiziert, sodass kein
Blatt aktiv sein muss, und nirgends ein .Select. Es greift nur dann zu PasteSpecial, wenn Sie
tatsächlich eine einzelne Schicht oder eine Transposition verlangen. Sie behalten die Arbeitsmappe und den
Code.
Häufig gestellte Fragen
Wie kopiere ich einen Bereich in ein anderes Blatt, ohne ihn auszuwählen?
Nutzen Sie ein qualifiziertes Destination:
Worksheets("Data").Range("A1:C100").Copy Destination:=Worksheets("Report").Range("A1"). Keines der
beiden Blätter muss aktiv oder ausgewählt sein — beide Bereiche zu benennen reicht. Das ist schneller als
das aufgezeichnete Select / Copy / Paste, und es stört nicht, was der Benutzer gerade betrachtet.
Muss der Zielbereich genauso groß sein wie die Quelle?
Bei Copy Destination nicht — übergeben Sie nur die obere linke Zelle des Ziels, und Excel passt die
Kopie an die Größe der Quelle an. Ein mehrzelliges Ziel funktioniert nur, wenn es ein ganzzahliges
Vielfaches der Quelle ist (Excel kachelt hinein) — eine einzelne Zelle zu benennen ist also die sichere
Standardwahl. Die reine Werte-Variante dst.Value = src.Value ist die Ausnahme: Dort müssen die beiden
Bereiche gleich groß sein.
Was ist der Unterschied zwischen Copy Destination und .Value = .Value?
Copy Destination ist eine vollständige Kopie — Werte, Formeln und Formate wandern alle mit.
dst.Value = src.Value bewegt nur Werte (Formeln kommen als ihre Ergebnisse an, Formatierung nicht), ist
aber schneller und berührt die Zwischenablage nie. Nutzen Sie Copy Destination, wenn Formatierung zählt;
nutzen Sie .Value = .Value, wenn Sie nur die Zahlen wollen.
Ist Copy Destination schneller als Copy und Paste?
Ja, und zuverlässiger. Es ist eine Anweisung statt drei, es vermeidet die Bildschirm-Neuzeichnungen, die
jedes .Select auslöst, und es leitet nie über die Zwischenablage, sodass nichts von außen die Daten
mitten im Vorgang löschen oder beschädigen kann. Für reine Werte ist dst.Value = src.Value noch
schneller.
Brauche ich Application.CutCopyMode = False nach Copy Destination?
Nein. Copy Destination lässt die Zwischenablage nicht scharf zurück, wie es ein einfaches .Copy
gefolgt von einem Einfügevorgang tut, also gibt es keinen Laufrahmen zu löschen.
Application.CutCopyMode = False brauchen Sie nur nach einem Zwischenablage-Einfügevorgang wie
PasteSpecial.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 09.09.2026.
Weiterführende Anleitungen: VBA PasteSpecial · VBA Werte einfügen · VBA Kopieren und Einfügen · VBA Range · VBA Cells
