Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1492to1496
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
Inhaltsverzeichnis

Mehrere Spalten kopieren VBA verbessern?

Mehrere Spalten kopieren VBA verbessern?
25.05.2016 15:15:53
Michael
Hallo zusammen,
durch folgenden Code werden Daten kopiert und eingefügt:
Sub Test03()
Workbooks("Original.xlsx").Sheets("Sheet1"). _
Range("D2:D6000,AM2:AM6000,AH2:AH6000,AC2:AC6000").Copy
ThisWorkbook.Sheets("Blatt1").Range("A2").PasteSpecial
End Sub
Funktioniert einwandfrei; Endpunkt Zelle 6000 ist willkürlich von mir gesetzt, da die Datenmenge sich monatlich ändern.
Am Anfang habe ich folgenden Code benutzt:
Sub test02()
With Sheets("Sheet1")
lz01 = .Range("D" & .Cells.Rows.Count).End(xlUp).Row
.Range("D2:D" & lz01).Copy
ThisWorkbook.Sheets("Blatt1").Range("A2").PasteSpecial
End With
End Sub
Hier sucht sich der Code selbstständig die letzte Zeile.
Ich schaffe es aber nicht diesen Code so zu verändern, dass er mehrere Spalten gleichzeitig kopiert.
Ich könnte jetzt natürlich diesen einfach kopieren und entsprechend ändern; geht das eventuell auch in einem Rutsch.
Vielen Dank schon einmal
Gruß
Michael

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

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Spalten kopieren VBA verbessern?
25.05.2016 15:40:24
Michael
Hi Michael,
das ist nur ein String, den Du wie folgt zusammensetzt:
.Range("D2:D" & lz01 & ",AM2:AM" & lz01 & ",AC2:AC" & lz01).Copy
usw.
Schöne Grüße,
Michael

AW: Mehrere Spalten kopieren VBA verbessern?
25.05.2016 15:48:26
Daniel
Hi
zum Beispiel so:
Intersect(.Range("2:" & lz01), .Range("D:D,AM:AM,AH:AH,AC:AC")).Copy
oder
.Range("D2,AC2,AH2,AM2").Resize(lz01 - 1).Copy
Gruß Daniel

AW: Mehrere Spalten kopieren VBA verbessern?
30.05.2016 11:56:18
Michael
Hallo Michael, hallo Daniel,
aufgrund verlängertes Wochenende komme ich erst jetzt dazu mich bei euch für die Antworten zu bedanken.
Michael:
Danke, absolut perfekt. Habe es so übernommen.
Daniel:
Dein erstes Beispiel funktioniert; hat aber den Nachteil, dass er nicht in der Reihenfolge, wie er kopiert auch einfügt. Reihenfolge beim Kopieren: D, AM, AH, AC; Reihenfolge beim Einfügen: D, AC, AH, AM
Das zweite Beispiel bricht mit der Fehlermeldung: Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler ab.
Nochmals Danke
Gruß
Michael

Anzeige
Sehr seltsam
30.05.2016 17:54:59
Michael
Hi zusammen,
Daniel liebt Intersect, und das nicht ohne Grund.
Aber es scheint, daß das Kopieren mehrerer, nicht zusammenhängender Spalten mitunter zu seltsamen Effekten führt:
Option Explicit
Sub test()
Dim lz01&
lz01 = Range("D" & Cells.Rows.Count).End(xlUp).Row
Sheets(1).Range("D2:D" & lz01 & ",AM2:AM" & lz01 & _
",AH2:AH" & lz01 & ",AC2:AC" & lz01).Copy
Sheets(2).Range("A2").PasteSpecial
'kopiert FORMELN
Sheets(1).Range("D2:D" & lz01 & ",AM2:AM" & lz01 & _
",AH2:AH" & lz01 & ",AC2:AC" & lz01).Copy _
Sheets(2).Range("A2") ' man beachte den Unterstrich    ^
'kopiert WERTE, warum?
End Sub
Sub test2()
Dim lz01&, i&
Const von = "D,AM,AH,AC"
Const nach = "A,B,C,D"
Dim aVon, aNach
aVon = Split(von, ",")
aNach = Split(nach, ",")
lz01 = Range("D" & Cells.Rows.Count).End(xlUp).Row
For i = 0 To UBound(aVon)
Sheets(1).Range(aVon(i) & "2").Resize(lz01 - 1).Copy Sheets(2).Range(aNach(i) & "2")
Next
'kopiert FORMELn, wie erwartet
End Sub
Deshalb würde ich, um Unvorhersehbares zu vermeiden, immer die untere Variante wählen - durch die Definition der Spalten in den Konstanten ist das auch sehr leicht zu warten.
Ansonsten vielen Dank für die Rückmeldung und
schöne Grüße,
Michael

Anzeige
AW: Sehr seltsam
31.05.2016 08:38:11
Michael
Hallo Michael,
schönen Dank für die Erklärung.
Gruß
Michael

64 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige