Dieses Tutorial zeigt Ihnen, wie Sie PasteSpecial in VBA verwenden, um nur bestimmte Zelleneigenschaften (z. B. Werte, Formate) einzufügen.
Wenn Sie in Excel eine Zelle kopieren und einfügen, kopieren Sie alle Eigenschaften der Zelle und fügen Sie sie ein: Werte, Formate, Formeln, Zahlenformatierung, Rahmen usw.:
Stattdessen können Sie "Spezial einfügen", um nur bestimmte Zelleneigenschaften einzufügen. In Excel kann das Menü Inhalte einfügen mit der Tastenkombination STRG + ALT + V (nach dem Kopieren einer Zelle) aufgerufen werden:
Hier sehen Sie alle Kombinationen von Zelleigenschaften, die Sie einfügen können.
Wenn Sie ein Makro aufzeichnen, während Sie das Menü „Spezial einfügen“ verwenden, können Sie einfach den generierten Code verwenden. Dies ist oft der einfachste Weg, VBA zum Einfügen von Inhalten zu verwenden.
Werte einfügen
Werte einfügen fügt nur die Zelle „Wert“ ein. Wenn die Zelle eine Formel enthielt, fügt Werte einfügen das Formelergebnis ein.
Mit diesem Code werden Werte für eine einzelne Zelle auf demselben Arbeitsblatt kopiert und eingefügt:
12 | Bereich("A1").KopierenRange("B1").PasteSpecial Paste:=xlPasteValues |
Kopieren und Werte in ein anderes Blatt einfügen
In diesem Beispiel werden Werte für einzelne Zellen auf verschiedenen Arbeitsblättern kopiert und eingefügt
12 | Sheets("Sheet1").Range("A1").CopySheets("Sheet2").Range("B1").PasteSpecial Paste:=xlPasteValues |
In diesen Beispielen werden Werte für einen Zellbereich kopiert und eingefügt:
Bereiche zum Kopieren und Einfügen von Werten
12 | Bereich("A1:B3").KopierenRange("C1").PasteSpecial Paste:=xlPasteValues |
Spalten kopieren und Werte einfügen
12 | Spalten("A").CopyColumns("B").PasteSpecial Paste:=xlPasteValues |
Zeilen kopieren und Werte einfügen
12 | Zeilen(1).KopierenZeilen(2).PasteSpecial Paste:=xlPasteValues |
Werte und Zahlenformate einfügen
Beim Einfügen von Werten wird nur der Zellenwert eingefügt. Es wird keine Formatierung eingefügt, auch keine Zahlenformatierung.
Wenn Sie Werte einfügen, möchten Sie wahrscheinlich auch die Zahlenformatierung einbeziehen, damit Ihre Werte formatiert bleiben. Schauen wir uns ein Beispiel an.
Hier werden wir eine Zelle mit einem Prozentsatz einfügen:
12 | Sheets("Sheet1").Columns("D").CopySheets("Sheet2").Columns("B").PasteSpecial Paste:=xlPasteValues |
Beachten Sie, wie die prozentuale Zahlenformatierung verloren geht und stattdessen ein schlampiger Dezimalwert angezeigt wird.
Verwenden wir stattdessen die Formate Werte einfügen und Zahlen:
12 | Sheets("Sheet1").Columns("D").CopySheets("Sheet2").Columns("B").PasteSpecial Paste:=xlPasteValuesAndNumberFormats |
Jetzt können Sie sehen, dass auch die Zahlenformatierung eingefügt wird, wobei das Prozentformat beibehalten wird.
.Wert statt .Einfügen
Anstatt Werte einzufügen, können Sie die Value-Eigenschaft des Range-Objekts verwenden:
Dadurch wird der Zellenwert von A2 gleich dem Zellenwert von B2
1 | Range("A2").Value = Range("B2").Value |
Sie können auch einen Zellbereich gleich dem Wert einer einzelnen Zelle festlegen:
1 | Bereich("A2:C5").Wert = Bereich("A1").Wert |
oder ein Zellbereich, der einem anderen Zellbereich identischer Größe entspricht:
1 | Range("B2:D4").Value = Range("A1:C3").Value |
Die Verwendung der Value-Eigenschaft erfordert weniger Eingaben. Wenn Sie sich mit Excel VBA vertraut machen möchten, sollten Sie außerdem mit der Arbeit mit der Value-Eigenschaft von Zellen vertraut sein.
Zellenwert vs. Value2-Eigenschaft
Technisch gesehen ist es besser, die Value2-Eigenschaft einer Zelle zu verwenden. Value2 ist etwas schneller (dies ist nur bei extrem großen Berechnungen von Bedeutung) und die Value-Eigenschaft liefert möglicherweise ein abgeschnittenes Ergebnis der Zelle, die als Währung oder Datum formatiert ist. Allerdings verwenden über 99% des Codes, den ich gesehen habe, .Value und nicht .Value2. Ich persönlich verwende .Value2 nicht, aber Sie sollten sich bewusst sein, dass es existiert.
1 | Range("A2").Value2 = Range("B2").Value2 |
Copy Paste Builder
Wir haben einen "Copy Paste Code Builder" erstellt, der es einfach macht, VBA-Code zum Kopieren (oder Ausschneiden) und Einfügen von Zellen zu generieren. Der Baumeister ist Teil unserer VBA-Add-In: AutoMacro.
AutoMakro enthält auch viele andere Code-Generatoren, ein umfangreicher Codebibliothek, und mächtig Codierungstools.
Inhalte einfügen - Formate und Formeln
Neben den Werten einfügen sind die gängigsten Optionen zum Einfügen von Inhalten Formate einfügen und Formeln einfügen
Formate einfügen
Mit Formaten einfügen können Sie alle Zellformatierungen einfügen.
12 | Bereich("A1:A10").KopierenRange("B1:B10").PasteSpecial Paste:=xlPasteFormats |
Formeln einfügen
Formeln einfügen fügt nur die Zellformeln ein. Dies ist auch äußerst nützlich, wenn Sie Zellformeln kopieren möchten, aber keine Zellhintergrundfarben (oder andere Zellformatierungen) kopieren möchten.
12 | Bereich("A1:A10").KopierenRange("B1:B10").PasteSpecial Paste:=xlPasteFormulas |
Formeln und Zahlenformate einfügen
Ähnlich wie beim Einfügen von Werten und Zahlenformaten oben können Sie auch Zahlenformate zusammen mit Formeln kopieren und einfügen
Hier kopieren wir eine Zellformel nur mit Buchhaltungsnummernformatierung und Einfügen von Formeln.
12 | Sheets("Sheet1").Range("D3").CopySheets("Sheet2").Range("D3").PasteSpecial xlPasteFormulas |
Beachten Sie, wie die Zahlenformatierung verloren geht und stattdessen ein nachlässiger, nicht gerundeter Wert angezeigt wird.
Verwenden wir stattdessen die Formate Formeln und Zahlen einfügen:
12 | Sheets("Sheet1").Range("D3").CopySheets("Sheet2").Range("D3").PasteSpecial xlPasteFormulasAndNumberFormats |
Jetzt können Sie sehen, dass auch die Zahlenformatierung eingefügt wird, wobei das Buchhaltungsformat beibehalten wird.
Spezial einfügen – Transponieren und Leerstellen überspringen
Spezial einfügen - Transponieren
Mit Paste Special Transpose können Sie Zellen kopieren und einfügen, indem Sie die Ausrichtung von oben-unten nach links-rechts (oder umgekehrt) ändern:
12 | Sheets("Sheet1").Range("A1:A5").CopySheets("Sheet1").Range("B1").PasteSpecial Transpose:=True |
Spezial einfügen - Leerzeichen überspringen
Leerzeichen überspringen ist eine spezielle Option zum Einfügen, die anscheinend nicht so oft verwendet wird, wie sie sein sollte. Es ermöglicht Ihnen, beim Kopieren und Einfügen nur nicht leere Zellen zu kopieren. Leere Zellen werden also nicht kopiert.
In diesem Beispiel unten. Wir kopieren Spalte A, fügen regelmäßig in Spalte B ein und überspringen das Einfügen von Leerzeichen in Spalte C. Sie können sehen, dass die leeren Zellen im Bild unten nicht in Spalte C eingefügt wurden.
123 | Sheets("Sheet1").Range("A1:A5").CopySheets("Sheet1").Range("B1").PasteSpecial SkipBlanks:=FalseSheets("Sheet1").Range("C1").PasteSpecial SkipBlanks:=True |
Andere spezielle Optionen zum Einfügen
Spezial einfügen - Kommentare
1 | Sheets("Sheet1").Range("A1").Copy Sheets("Sheet1").Range("E1").PasteSpecial xlPasteComments |
Spezial einfügen - Validierung
12 | Sheets("Sheet1").Range("A1:A4").CopySheets("Sheet1").Range("B1:B4").PasteSpecial xlPasteValidation |
Inhalte einfügen - Alle mit Quelldesign
123 | Arbeitsmappen(1).Sheets("Sheet1").Range("A1:A2").CopyArbeitsmappen(2).Sheets("Sheet1").Range("A1").PasteSpecialArbeitsmappen(2).Sheets("Sheet1").Range("B1").PasteSpecial xlPasteAllUsingSourceTheme |
Spezial einfügen – Alle außer Rahmen
123 | Bereich("B2:C3").KopierenRange("E2").PasteSpecialRange("H2").PasteSpecial xlPasteAllExceptBorders |
PasteSpecial - Spaltenbreiten
Ein persönlicher Favorit von mir. PasteSpecial Column Widths kopiert die Spaltenbreite und fügt sie ein.
123 | Bereich("A1:A2").KopierenRange("C1").PasteSpecialRange("E1").PasteSpecial xlPasteColumnWidths |
PasteSpecial - Alle MergingConditionalFormats
123 | Bereich("A1:A4").KopierenRange("C1").PasteSpecialRange("E1").PasteSpecial xlPasteAllMergingConditionalFormats |