Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Range Copy Paste Möglichkeiten

Forumthread: VBA Range Copy Paste Möglichkeiten

VBA Range Copy Paste Möglichkeiten
03.02.2023 09:21:44
Michael
Hallo liebe Makrofreunde,
ich habe ein Problem mit einem Makro gelöst. Das funktioniert auch gut. Allerdings komme ich mit dem Kopieren und Einfügen von Zellbereichen nicht klar.
Hier ist der funktionierende Absatz, den ich gerne erweitern möchte. Im Code sieht man, dass vom Worksheet "wsQuelle" ein bestimmter Bereich kopiert wird und auf dem Blatt "wsZiel" eingefügt wird.

With wsQuelle
.Range(.Cells(ID + 1, 22), .Cells(ID + 1 - (j - 1), 1)).Copy
wsZiel.Cells(k, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End With

Das reicht mir aber nicht. Ich möchte gerne hinter die eingefügten Zeilen in einer Spalte den Wert einer Variable eintragen. Es soll also eine einzige Zelle kopiert werden und im wsZiel hinter den zuvor eingefügten Beriech hinzugefügt werden. Ich erhalte aber einen Laufzeitfehler.

wsQuelle.Range(Cells(ID + 1, 12), Cells(ID + 1, 12)).Copy
wsZiel.Range(Cells(k - j, 25), Cells(k, 25)).PasteSpecial _
xlPasteValues

Ich habe mir diesen Forumbeitrag angeschaut, komme aber mit der Syntax nicht zurecht, da es im besagten Beitrag um zwei verschiedene Workbooks geht. In meinem Fall passiert aber alles in einem Workbook. https://www.herber.de/forum/archiv/1568to1572/1570128_Range_Copy_Value.html
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Range Copy Paste Möglichkeiten
03.02.2023 10:00:20
hary
Moin.
Du musst bei Cells auch das Blatt zuweisen.
In diesen Fall Value direkt eintragen geht auch.
 wsZiel.Range( wsZiel.Cells(k - j, 25),  wsZiel.Cells(k, 25)) = wsQuelle.Cells(ID + 1, 12).Value
gruss hary
AW: VBA Range Copy Paste Möglichkeiten
03.02.2023 16:17:39
Michael
Hallo Hary,
deine Methode unterscheidet sich von den üblichen Codeschnipseln im Netz. Vielleicht ist die folgende Frage etwas dumm, aber so richtig verstehe ich es noch nicht:
Du weist in deinem Beispiel einfach einem bestimmten Bereich den Inhalt eines anderen Bereichs zu:
Ziel = Quelle.value
Das was ich sonst so im Netz zu Copy/Paste gefunden habe läuft aber über
Quelle.copy Ziel.paste
Da meine Tabelle sehr groß ist (>250k Zeilen) ist zwischenzeitig Excel in die Knie gegangen. Ich habe deshalb
Application.DisplayAlerts = False 
eingefügt, was offensichtlich Wunder wirkt.
Ist dein Code eher ressourcenschonend? Kann man das überhaupt so sagen? Welche Unterschiede gibt es zwischen deiner Methode und der mit .copy .paste?
Anzeige
AW: VBA Range Copy Paste Möglichkeiten
04.02.2023 10:48:53
hary
Moin Michael
"Ist dein Code eher ressourcenschonend?"
Fuer eine ganz genaue Angabe(wieviel es bringt) bin ich eine zu kleine VBA-Leuchte. ;-))
Aber abein vom lesen her:
Ziel = Quelle.value
oder
Quelle kopieren in Zwischenablage / Zwischenablage in Ziel einfuegen
ist das erste schon mal ohne Zwischenschritte..
Mit
Application.DisplayAlerts = False
schaltest/ ueberspringst du Meldungen.

gruss hary
Anzeige
AW: VBA Range Copy Paste Möglichkeiten
03.02.2023 12:41:44
Daniel
Hi
wenn du mit mehreren Blättern oder Mappen arbeitest, dann musst du vor jedem Cells und Range IMMER das Workbook bzw das Worksheet angeben.
das gilt auch für die Cells innerhalb von Range(Cells(), Cells()). ohne diese Angabe geht die Referenz auf das gerade aktive Tabellenblatt.
um die Schreibarbeit zu vereinfachen, kann man neben dem Range(Cells(), Cells()) noch weitere Methoden um beschreiben eines Zellbereichs verwenden.
Für Einzelzellen reicht Cells().
Größere Zellbereiche kann man mit Cells().Resize() beschreiben:
wsQuelle.Cells(ID + 1, 12).Copy
wsZiel.Cells(k - j, 25).Resize(j + 1, 1).PasteSpecial xlPasteValues
Gruß Daniel
Anzeige
AW: VBA Range Copy Paste Möglichkeiten
03.02.2023 16:06:32
Michael
Hallo Daniel,
vielen Dank
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

VBA Range Copy Paste Möglichkeiten


Schritt-für-Schritt-Anleitung

  1. Kopieren eines Zellbereichs: Um einen Zellbereich zu kopieren, kannst du den folgenden VBA-Code verwenden:

    With wsQuelle
        .Range(.Cells(ID + 1, 22), .Cells(ID + 1 - (j - 1), 1)).Copy
        wsZiel.Cells(k, 1).PasteSpecial xlPasteValues
        Application.CutCopyMode = False
    End With
  2. Einfügen eines Wertes: Um zusätzlich einen Einzelwert hinter dem kopierten Bereich einzufügen, gehe wie folgt vor:

    wsZiel.Range(wsZiel.Cells(k - j, 25), wsZiel.Cells(k, 25)) = wsQuelle.Cells(ID + 1, 12).Value
  3. Verwendung von Resize: Um größere Bereiche effizient zu kopieren, kannst du Resize verwenden:

    wsQuelle.Cells(ID + 1, 12).Copy
    wsZiel.Cells(k - j, 25).Resize(j + 1, 1).PasteSpecial xlPasteValues

Häufige Fehler und Lösungen

  • Laufzeitfehler beim Kopieren: Stelle sicher, dass du das Arbeitsblatt bei der Verwendung von Cells angibst. Zum Beispiel:

    wsQuelle.Cells(ID + 1, 12).Copy
    wsZiel.Cells(k - j, 25).PasteSpecial xlPasteValues
  • Verwendung von Application.DisplayAlerts: Wenn Excel bei großen Datenmengen langsamer wird, kannst du:

    Application.DisplayAlerts = False

    verwenden, um Meldungen während des Vorgangs zu unterdrücken.


Alternative Methoden

  • Direktes Zuweisen von Werten: Anstelle des herkömmlichen Kopierens und Einfügens kannst du Werte direkt zuweisen, was ressourcenschonender ist:

    wsZiel.Cells(k - j, 25).Value = wsQuelle.Cells(ID + 1, 12).Value
  • Verwendung von Range.Copy und Range.Paste: Diese Methode ist zwar gängig, kann aber bei großen Datenmengen ineffizient sein. Es sieht so aus:

    wsQuelle.Range("A1").Copy
    wsZiel.Range("A2").PasteSpecial xlPasteValues

Praktische Beispiele

  1. Kopiere und füge einen Bereich ein:

    wsQuelle.Range("A1:A10").Copy
    wsZiel.Range("B1").PasteSpecial xlPasteValues
  2. Einzelne Zelle kopieren und einfügen:

    wsQuelle.Cells(1, 1).Copy
    wsZiel.Cells(2, 2).PasteSpecial xlPasteValues
  3. Kopieren eines Bereichs und Einfügen eines Wertes:

    wsQuelle.Range("C1:C10").Copy
    wsZiel.Range("D1").PasteSpecial xlPasteValues
    wsZiel.Cells(1, 5).Value = wsQuelle.Cells(1, 12).Value

Tipps für Profis

  • Vermeide das Kopieren von Formaten, wenn es nicht nötig ist. Benutze xlPasteValues, um nur die Werte zu kopieren.

  • Optimierung durch Arrays: Wenn du mit großen Datenmengen arbeitest, erwäge die Verwendung von Arrays, um die Geschwindigkeit zu erhöhen:

    Dim arr As Variant
    arr = wsQuelle.Range("A1:A100").Value
    wsZiel.Range("B1:B100").Value = arr
  • Fehlerbehandlung: Füge Fehlerbehandlung hinzu, um Laufzeitfehler zu vermeiden:

    On Error Resume Next
    ' Dein Code hier
    On Error GoTo 0

FAQ: Häufige Fragen

1. Wie kann ich die Leistung meiner VBA-Skripte verbessern?
Vermeide das Kopieren von Formaten und nutze stattdessen Value-Zuweisungen. Zudem solltest du die Bildschirmaktualisierung und Berechnung vorübergehend deaktivieren.

2. Warum erhalte ich einen Laufzeitfehler beim Kopieren von Bereichen?
Stelle sicher, dass du die korrekten Objekte (Workbook und Worksheet) bei der Verwendung von Cells und Range angibst.

3. Was ist der Unterschied zwischen .Copy und direkter Zuweisung?
.Copy und .Paste verwenden die Zwischenablage und sind oft langsamer, während die direkte Zuweisung sofort den Wert überträgt und ressourcenschonender ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige