Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1908to1912
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Kopieren ohne Copy und Paste
15.12.2022 19:37:35
Monika
Hallo,
ich habe in einem Buch gelesen, dass die Range-Methoden Copy und Paste in einem guten Makro gar nicht vorkommen sollten. Kann mir bitte jemand zeigen, wie das gehen könnte? Ich habe so begonnen:

Sub OhneCopyPaste()
Dim wb As Workbook
Dim sh As Worksheet
Dim rngSource As Range
Dim rngDestination As Range
Set wb = ThisWorkbook
Set sh = wb.Worksheets("Tabelle1")
Set rngSource = sh.Range("Quelle")     ' Name steht für den Bereich F3:J8 mit mehreren verschiedenen Zellformaten
Set rngDestination = sh.Range("Ziel")  ' Name steht für eine (1) Zelle, C10
End Sub
Es soll alles kopiert werden (nicht nur Werte).
Mit Bitte um Lösungsvorschläge verbleibe ich mit schönem Gruß,
Monika

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren ohne Copy und Paste
15.12.2022 20:14:46
Daniel
Hi
da würde mich mal als erstes interessieren, WARUM das in einem guten Makros nicht vorkommen sollte.
Wenn das Buch was taugt, sollte das mit erwähnt werden.
wenn du nur Werte oder Formeln übertragen willst (also keine Formate), dann geht das recht einfach zu ersetzten.

Quelle.Copy
Ziel.PasteSpecial xlpastevalues
wird

Ziel.Value = Quelle.Value
mit Quelle und Ziel als Range-Variablen mit den jeweiligen Bereichen.
allerdings gibt es ein paar Unterschiede, die beachtet werden müssen:
bei Copy-PasteSpecial reicht es aus, als Ziel die linke obere Zelle anzugeben.
bei der .Value-Methode müssen die beiden Zellbereiche gleich groß sein.
Ebenso ist es nicht möglich, mit der .Value-Methode Daten zu duplizieren, in dem man den Zielbereich größer angibt als die Quelle.
Dann gibt es noch einen weiteren wichtigen Unterschied, wenn man Formeln kopiert und als Wert einfügt.
Bei Copy-PasteSpecial werden die Formelergbnisse 1:1 übertragen, dh eine als Text formatierte Zahl bleibt ein Text, auch das Formelergebnis "" bleibt ein Text (auch wenns nur der Leerstring ist und die Zelle leer aussieht)
Bel .Value = .Value macht Excel dann die Typumwandlung, dh als Text formatierte Zahlen werden zu Zahlen und das Formelergebnis "" wird in eine echte Leerzelle gewandelt.
Ein weiterer Unterschied ist, dass bei Copy-PasteSpecial Excel die eingefügten Daten selektiert. Das löst dann, falls vorhanden, das Selection-Change-Eventmakro aus (was störend sein kann und etwas Zeit kostet), Allerdings kann man diesen Effekt auch mal ausnutzen, wenn man die eingefügten Daten nachbearbeiten will, dann muss man sich nicht drum kümmeren, wie groß der Zellbereich ist sondern kann einfach Selection nehmen.
Nächster Unterschied ist, dass das Copy-PasteSpecial auch die normale Windows-Zwischenablage füllt, in der die Daten dann liegen, und zwar so lange, bis sie durch andere ersetzt werden. Bei .Value=.Value wird die Zwischenablage nicht genutzt.
Was die Leistungsfähigkeit bei großen Datenmengen angeht, dann ist .das Copy-PasteSpecial etwas schneller wenn man sehr große Mengen in einem Block kopiert.
das .Value=.Value ist schneller, wenn viele kleine einzelbereiche übertragen werden sollen.
Das sind so die Unterschiede, die man kennen sollte um sich zu entscheiden, was man verwenden will.
Gruß Daniel
Anzeige
AW: Kopieren ohne Copy und Paste
16.12.2022 16:46:09
Monika
Herzlichen Dank für die sehr hilfsreiche Beratung, ja für einen sehr nützlichen Unterricht in Kompaktform!
Gruß, Monika
AW: Kopieren ohne Copy und Paste
15.12.2022 20:27:29
onur
Das ist nur teilweise richtig:

Private Sub CommandButton1_Click()
Dim sh
Set sh = Worksheets("Tabelle1")
sh.Range("F3:J8").Copy sh.Range("C10")
End Sub

AW: Kopieren ohne Copy und Paste
15.12.2022 21:50:20
snb
Warum dann nicht ?

Private Sub CommandButton1_Click()
with sheets("Tabelle1")
.Range("F3:J8").Copy .Range("C10")
end with
End Sub

AW: Kopieren ohne Copy und Paste
15.12.2022 23:36:14
onur
Ich werde pro Wort betzahlt. :)
Oder als Einzeiler:

Sheets("Tabelle1").Range("F3:J8").Copy Sheets("Tabelle1").Range("C10")

Anzeige
AW: Kopieren ohne Copy und Paste
16.12.2022 17:48:02
Monika
Was ist "nur teilweise richtig"? Der dem Doppelpunkt folgende Code? Hoffentlich nicht.
Danke für den Beitrag. Offensichtlich ist der böse Bube nicht Copy, sondern Select mit Paste.
Gruß, Monika
AW: Kopieren ohne Copy und Paste
16.12.2022 18:10:57
onur
Mit "teilweise" meinte ich, dass im Beispiel von dir gar kein "Paste" auftauchen sollte, da du ja dafür einen Zielbereich vorher selektiert haben solltest. Und somit landen wir wieder beim "Select". :)
Man könnte auch auf "Copy" verzichten, aber dafür muss der Zielbereicht genauso gross sein wie der Quellbereich. Man kann dann also als Ziel nicht einfach nur die Zelle links oben angeben. Klappt allerdings nur mit den Werten.

Range("C5:D8") = Range("A1:B4").Value

Anzeige
AW: Kopieren ohne Copy und Paste
15.12.2022 20:31:12
Daniel
achso du wolltest ja auch Lösungen:
also wie gesagt, Werte und Formeln kann man ohne Copy direkt übertragen auch in größeren Datenmengen, sofern es sich um einen lückenlosen, rechteckigen Tabellenauschnitt handelt.
Bei Formaten funktioniert das nicht.
Hier musst du, wenn du ohne Copy-Paste auskkommen willst, jede Formateigenschaft einzeln und jede Zelle einzeln übertragen.
(ein Format eines größeren Zellbereichs zu übertragen funktioniert nur dann, wenn alle Zellen die gleiche Formateigenschaft haben)
hier müsstest dann mit einer Schleife arbeiten
also im Prinzip so:

for Z = 0 To 5
for S = 0 to 4
Range("C10").Offset(Z, S).Interior.Color = Range("F3").Offset(Z, S).Interior.Color
Range("C10").Offset(Z, S).Font.Color = Range("F3").Offset(Z, S).Font.Color
und so weiter für jedes Format, das wichtig ist
Next
Next
Gruß Daniel
Anzeige
AW: Kopieren ohne Copy und Paste
15.12.2022 20:36:09
Daniel
Wobei auch interessant wäre, ob die jetzt das

Quelle.Copy
ZielZelle.Select
ActiveSheet.Paste

gemeint haben oder das

Quelle.Copy
Ziel.PasteSpecial xlpasteall
ersteres hat halt den Nachteil, dass man die Zielzelle selektieren muss, weshalb man es nicht für Excelspezifische Inhalte (Zellen, Tabellen) verwenden sollte, sondern nur zum Einfügen von Bildern oder Grafiken, bzw wenn Sachen aus der Windowszwischenablage eingefügt werden müssen.
Gruß Daniel
AW: Kopieren ohne Copy und Paste
16.12.2022 17:18:43
Monika
Im Buch wird die erste Methode angeführt, also jene mit ZielZelle.Select. Bei der Buchlektüre habe ich als Nachteil den Umstand verstanden, dass der Makro unruhig läuft und der Bildschirm flackert.
Danke, jetzt weiß ich auch, warum die Methode zum Kopieren EXCEL-spezifischen Inhalte eher nicht geeignet ist.
Monika
Anzeige
AW: Kopieren ohne Copy und Paste
16.12.2022 17:26:22
onur
Mit Select arbeiten meist nur Leute, die vom Makrorecorder gelernt haben, da der Makrorecorder halt nur so arbeiten kann, da er jeden einzelnen Schritt des Users aufzeichnet. Und der User muss ja jede Zelle, mit der er irgendwas machen will, vorher selektieren/anklicken.
AW: Kopieren ohne Copy und Paste
16.12.2022 17:46:21
Daniel
Also:
ActiveSheet.Paste sollte man nicht zum Einfügen von Zellen und Inhalten verwenden, sondern nur zum Einfügen von Bildern und Grafiken.
Das Problem ist, bei Zellinhalten braucht man immer eine Zielzelle, in die sie eingefügt werden und diese Zielzelle kann man bei .Paste nicht direkt angeben, sondern es wird immer die aktive Zelle auf dem Blatt verwendet, dh man muss vorher selektieren und dann flackerts.
Zellinhalte jedoch kann man besser mit PasteSpecial einfügen, da hat man mehr Optionen und kann die Zielzelle angeben, dh es muss nichts selektiert werden.
Grafiken muss man mit .Paste einfügen, es ist aber nicht zwingend notwendig hier die Zielzelle vorher zu selektieren, weil man die Grafik später immer noch an den passenden Ort schieben kann.
Zellinhalte muss man jedoch gleich an den richtigen Ort einfügen, da man sonst vielleicht Inhalte überschreibt.
Anzeige
AW: Kopieren ohne Copy und Paste
16.12.2022 19:34:37
Monika
Auch für diesen Beitrag herzlichen Dank. So knapp, dafür aber zielgerichtet sehr informativ, findet man diese Dinge nirgends dargeboten. Schade.
Gruß, Monika
.Value = .Value ist besser
15.12.2022 21:06:41
lupo1
... weil man ordnungspolitisch die Formate am Ziel sowieso schon vorbereitet.
Kopiere ich sie hingegen erst dorthin, verliere ich die "Architektur" durchgehend gleicher Formate.
Das mit der echten Leerzelle ist ein weiterer Grund.
Geschwindigkeit ist sowieso völlig nebensächlich, weil man eigentlich ein drittes Verfahren (hier gar nicht nicht genannt) verwendet:
Man weist einen Bereich einem Variantarray zu,
manipuliert dort,
und weist dann das Array (oder ein Drittarray) zurück auf den Quellbereich der Tabelle zu.
Anzeige
AW: .Value = .Value ist besser
15.12.2022 21:43:49
Daniel
naja, dein "drittes Verfahren" braucht man ja auch nur , wenn die Werte noch verändert werden sollen.
will man nur 1:1 kopieren, lohnt sich das mit der Variantvariable nicht. VBA arbeitet intern schon so.
es wäre nur zusätzlicher, unnötiger Programmieraufwand.
und ob man "durchgehend gleiche Formate" haben will, ist ja eine Frage der Aufgabenstellung, das kann man so allgemein nicht als allgemeingültig festsetzen.
Ohne die Variant-Array-Manipulation ...
15.12.2022 23:32:59
lupo1
... ist die ganze Diskussion obsolet. Die paar Hundertstel Sekunden zwischen Copy und .Value ...
Nicht ganz
16.12.2022 11:27:04
Daniel
Es gibt ja noch andere Unterschiede zwischen den beiden Methoden, nicht nur die Zeit.
Anzeige

251 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige