Getestet mit: Excel 365 v2509 · Excel 2021 · Excel 2019 · zuletzt geprüft am 12.06.2026
Kurzfassung — Der Makrorekorder schreibt Select → Copy → Paste: drei Schritte, die deine Daten durch die Windows-Zwischenablage leiten. Das ist langsam, kann von allem Laufenden gelöscht werden und lässt den Bildschirm flimmern. Brauchst du nur die Werte, schrumpft das Ganze auf eine Zeile, die die Zwischenablage nie berührt: rngB.Value = rngA.Value.
Sub CopyDemo()
' (1) Nur Werte — keine Zwischenablage, sofort, nicht unterbrechbar
Sheet2.Range("A1:C100").Value = Sheet1.Range("A1:C100").Value
' (2) Werte UND Formatierung in einem Schritt — .Copy mit Destination
Sheet1.Range("A1:C100").Copy Destination:=Sheet2.Range("A1")
' (3) Nur ein Aspekt (Werte / Formate / Formeln) — braucht die Zwischenablage
Sheet1.Range("A1:C100").Copy
Sheet2.Range("A1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False ' den „Laufrahmen" der Zwischenablage löschen
End Sub
Das Denkmodell: Die Zwischenablage ist ein Mittelsmann, den dein Code nicht braucht
Wenn du kopierst und einfügst, ist die Zwischenablage ein Zwischenlager — hier kopieren, dorthin klicken, einfügen. Der Makrorekorder zeichnet diese menschlichen Schritte getreu auf, deshalb ist aufgezeichneter Code voller .Select, Selection.Copy und ActiveSheet.Paste. Aber dein Code hält bereits direkte Verweise auf beide Bereiche. Er muss nichts anklicken und braucht kein Zwischenlager — er kann die Daten direkt hinüberbewegen.
Diese eine Verschiebung erklärt alles Folgende. Copy-Paste ist nicht falsch; es ist die Übersetzung eines manuellen Ablaufs in Code, und meist hatte der manuelle Ablauf einen Schritt, den dein Code schlicht überspringen kann. Frag „bewege ich Werte, oder Werte-und-Format, oder einen bestimmten Aspekt?" und das richtige Werkzeug fällt heraus — und zwei der drei Antworten kommen der Zwischenablage nie nahe.
Die eine Regel: Zuweisung bewegt Werte; die Zwischenablage ist nur für Aspekte
Hier ist die Regel, die 90 % des aufgezeichneten Copy-Paste ersetzt:
Um Werte zu bewegen, weise das
.Valueeines Bereichs einem anderen zu — keinCopy, keinPaste, keine Zwischenablage.Copy+PasteSpecialbrauchst du nur, wenn du einen bestimmten Aspekt einer Zelle willst (nur Werte, nur Formate, nur Formeln) und sonst nichts.
.Value = .Value ist direkt, sofortig und — entscheidend — nicht unterbrechbar. Nichts kann es mitten im Vorgang löschen, weil es nie geteilten globalen Zustand nutzt. Vergleiche die zwei Wege, „Werte einzufügen":
' ⚠ REKORDER-STIL — Zwischenablage, drei Schritte, fragil
Range("A1:A100").Select
Selection.Copy
Range("C1").Select
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
' ✓ DIREKT — eine Zeile, keine Zwischenablage, nichts zu löschen oder zu unterbrechen
Range("C1:C100").Value = Range("A1:A100").Value
Die direkte Form ist schneller, kürzer und übersteht alles, was während der Ausführung auf dem Rechner passiert. Die aufgezeichnete Form erledigt dieselbe Aufgabe über eine globale Ressource, die drei andere Programme gerade nutzen könnten.
Die Falle: PasteSpecial hängt an einer Zwischenablage, die alles löschen kann
Wenn du PasteSpecial brauchst — etwa um die Formatierung einer Zelle zu behalten, aber die Formeln zu verwerfen — denk daran, dass Copy Daten in die System-Zwischenablage legt, und die ist globaler, flüchtiger Zustand. Zwei Dinge beißen:
Range("A1:A100").Copy
MsgBox "Gleich wird eingefügt" ' ⚠ manche Dialoge / Neuberechnungen löschen die Zwischenablage...
Range("C1").PasteSpecial xlPasteValues ' ...und jetzt scheitert das oder fügt nichts ein
Die Lösungen sind Gewohnheiten, keine Tricks:
- Setze nichts zwischen
CopyundPasteSpecial— keinMsgBox, keine Berechnung, kein zweites Copy. Kopieren, einfügen, fertig. - Lösche danach immer mit
Application.CutCopyMode = False, damit die Quellzellen nicht mit „Laufrahmen" umrandet und die Zwischenablage scharf bleiben. - Willst du nur Werte, greif gar nicht erst zu
PasteSpecial— nimm.Value = .Value, und die ganze Klasse der Zwischenablage-Probleme verschwindet.
Zum Kopieren von Werten und Formatierung zusammen ist rng.Copy Destination:=target der Sweet Spot: eine einzige Anweisung, sie trägt alles, und die Destination-Form macht die Bewegung, ohne die Zwischenablage scharf zu lassen.
Wann was
| Du willst bewegen… | Nimm | Zwischenablage? |
|---|---|---|
| Nur Werte | rngB.Value = rngA.Value |
Nein |
| Werte und Formate, Formeln, alles | rngA.Copy Destination:=rngB |
Nein |
| Nur Werte (und du bist schon mitten im Copy) | .PasteSpecial xlPasteValues |
Ja |
| Nur Formate | .PasteSpecial xlPasteFormats |
Ja |
| Nur Formeln | .PasteSpecial xlPasteFormulas |
Ja |
| Zeilen ↔ Spalten transponieren | .PasteSpecial Transpose:=True |
Ja |
Die Meinung: Niemals aufgezeichnetes Copy-Paste ausliefern
Die Linie, die ich verteidige: aufgezeichnetes Copy-Paste ist ein Entwurf, kein Ziel. Der Rekorder ist eine großartige Art herauszufinden, welches Objekt und welche Methode du brauchst, aber der Code, den er schreibt — Select, Selection, ActiveSheet.Paste, kein CutCopyMode-Aufräumen — ist der langsamste, fragilste Weg. Er hängt davon ab, was ausgewählt ist, er lässt den Bildschirm flimmern, und er leitet alles durch eine Zwischenablage, die jede andere App zertrampeln kann.
Streich die .Selects, entscheide, was du wirklich bewegst, und die Antwort ist fast immer eine Zeile. Sind es nur Werte, .Value = .Value. Ist es alles, .Copy Destination:=. Heb PasteSpecial für den echten „nur ein Aspekt"-Fall auf, halte es eng zwischen Copy und dem Einfügen, und lösche danach CutCopyMode. Ein so geschriebenes Makro läuft in einem Bruchteil der Zeit und kann von keinem Dialog unterbrochen werden — was der ganze Sinn der Automatisierung ist.
Häufige VBA-Copy-Paste-Fehler (und die Lösung)
| Symptom | Ursache | Lösung |
|---|---|---|
| PasteSpecial scheitert / fügt nichts ein | Ein Dialog oder eine Neuberechnung löschte die Zwischenablage | Nichts zwischen Copy und PasteSpecial |
| Makro langsam bei großen Bereichen | Zellweises oder Select-basiertes Copy-Paste |
Ganze Bereiche mit .Value = .Value bewegen |
| Quelle bleibt umrandet („Laufrahmen") | Application.CutCopyMode = False vergessen |
Direkt nach dem Einfügen löschen |
| Formate kamen mit, als du Werte wolltest | Copy/Paste statt nur Werte |
.Value = .Value oder PasteSpecial xlPasteValues |
| „Paste-Methode des Worksheet-Objekts schlug fehl" | Einfügen in anders geformten Bereich, oder nichts kopiert | Dimensionen abgleichen; sicherstellen, dass Copy lief |
| Bildschirm flimmert beim Kopieren | .Select/.Activate in der Schleife |
Bereiche direkt referenzieren; ScreenUpdating = False |
Wenn das Kopieren sich stapelt — beschreibe stattdessen die Bewegung
Du wolltest nie die Fehlermodi der Zwischenablage lernen. Du wolltest „zieh die bezahlten Zeilen aus diesem Blatt jeden Morgen in die Zusammenfassung, nur Werte". Bis du die .Selects entrekordert, zwischen .Value und PasteSpecial entschieden und an CutCopyMode gedacht hast, ist die Kopier-Mechanik das Makro. ExcelMaster Agent lässt dich die Bewegung in klarem Deutsch beschreiben — „kopiere die Zeilen mit Status bezahlt als Werte ins Blatt Zusammenfassung, behalte die Kopfzeile" — und schreibt Python, das die Daten direkt bewegt, ohne Zwischenablage, und vorher deine Arbeitsmappe sichert. Kostenlos testen →
Verwandte Anleitungen
- VBA Range — Zellen referenzieren, ohne sie auszuwählen
- VBA Array — einen Bereich in einem Zug lesen und schreiben
- VBA VLookup — der „nicht gefunden"-Absturz und wann ein Dictionary gewinnt
- VBA Outlook — E-Mail aus einem Makro richtig senden
- VBA For-Schleife in Excel — 8 praxisnahe Beispiele
FAQ
Wie kopiere und füge ich in VBA ohne Zwischenablage ein?
Für Werte direkt zuweisen: Range("C1:C100").Value = Range("A1:A100").Value. Um Werte und Formatierung in einem Schritt zu tragen, ohne die Zwischenablage scharf zu lassen, nimm Range("A1:A100").Copy Destination:=Range("C1"). Beide vermeiden den langsamen, unterbrechbaren Copy → PasteSpecial-Umweg.
Wie füge ich in VBA nur Werte ein?
Am saubersten ist Zielbereich.Value = Quellbereich.Value — Werte kopieren ohne jede Zwischenablage. Bist du schon mitten im Copy, nimm Range("C1").PasteSpecial Paste:=xlPasteValues und dann Application.CutCopyMode = False. Setze kein MsgBox und keine Berechnung zwischen Kopieren und Einfügen, sonst kann die Zwischenablage vorher gelöscht werden.
Was macht Application.CutCopyMode = False?
Es löscht den „Laufrahmen" der Zwischenablage und das ausstehende Kopieren, nachdem du eingefügt hast. Das verhindert veralteten Zwischenablage-Zustand und einen sichtbar umrandeten Quellbereich. Führe es direkt nach einer Copy + PasteSpecial-Sequenz aus.
Warum ist mein VBA-Copy-Paste so langsam?
Meist weil es Bereiche .Selectt und Daten blockweise durch die Zwischenablage leitet, oft in einer Schleife. Bewege ganze Bereiche auf einmal mit .Value = .Value, lass die .Select/.Activate-Aufrufe weg und setze während des Laufs Application.ScreenUpdating = False.
Was ist der Unterschied zwischen Copy Destination und PasteSpecial?
rng.Copy Destination:=target kopiert alles (Werte, Formate, Formeln) in einer Anweisung, ohne die Zwischenablage scharf zu lassen. PasteSpecial existiert, um nur einen Aspekt zu kopieren — Werte, Formate oder Formeln — und braucht ein vorheriges Copy plus ein CutCopyMode = False-Aufräumen. Nimm Destination für eine volle Kopie, PasteSpecial, wenn du nur einen Teil willst.
