Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1592to1596
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

Kopieren ab Zeile 2

Kopieren ab Zeile 2
05.12.2017 23:01:49
Burghard

Hallo,
kann mir jemand dieses Makro so umschreiben, dass das Kopieren nicht mit Zeile 1, sondern mit Zeile 2 beginnt?
Sub Zusammenführen()
Set ws1 = Worksheets("Auswertung")
anz1 = ws1.Cells(65356, 1).End(xlUp).Row
ws1.Range("a2:b" & anz1).ClearContents
For i = 1 To 4
If Sheets(i).Name  "Auswertung" Then
anz1 = ws1.Cells(65356, 1).End(xlUp).Row
Set ws2 = Worksheets(Sheets(i).Name)
anz2 = ws2.Cells(65356, 1).End(xlUp).Row
ws2.Range("G200:H" & anz2).Copy Destination:=ws1.Range("a" & anz1 + 1)
End If
Next i
End Sub
Hilfe wäre nett.
Grüße
Burghard

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

Betreff
Datum
Anwender
Anzeige
AW: Kopieren ab Zeile 2
05.12.2017 23:33:44
Werner
Hallo Gerhard,
hier
ws2.Range("G200:H" & anz2).Copy
Willst du von G200 bis H letzte belegte Zeile kopieren.
Schreibst jetzt aber von Zeile 2 - was jetzt?
Dein Problem scheint mir aber ein anderes zu sein. Du ermittelst die letzte belegte Zeile in Spalte A. Kann es sein, dass du da gar keine Daten hast?
Versuch mal:
anz2 = ws2.Cells(65356, 7).End(xlUp).Row
ws2.Range("G2:H" & anz2).Copy Destination:=ws1.Range("a" & anz1 + 1)
Gruß Werner
AW: Kopieren ab Zeile 2
06.12.2017 14:31:10
Burghard
Danke Werner,
Deine Verbesserungen und die Hilfe anderer Forumsmitglieder haben bei mir den Durchbruch bewirkt. Ich konnte jetzt das ganze Makro fertigstellen. Ist vielleicht für mich als Anfänger nicht perfekt, aber es funktioniert wie gewünscht. Voilà:
Sub Zusammenführen()
Application.ScreenUpdating = False
Set ws1 = Worksheets("Auswertung")
anz1 = ws1.Cells(65356, 1).End(xlUp).Row
ws1.Range("a2:b" & anz1).ClearContents
ws1.Range("a2:b" & anz1).Interior.ColorIndex = xlNone
For i = 1 To 12
If Sheets(i).Name  "Auswertung" Then
anz1 = ws1.Cells(65356, 1).End(xlUp).Row
Set ws2 = Worksheets(Sheets(i).Name)
anz2 = ws2.Cells(65356, 7).End(xlUp).Row
ws2.Range("G2:H" & anz2).Copy Destination:=ws1.Range("a" & anz1 + 1)
End If
Next i
Worksheets("Auswertung").Range("A1") = "Ausgaben"
Worksheets("Auswertung").Range("B1") = "Wofür"
letztezeile = Worksheets("Auswertung").Cells(65536, 1).End(xlUp).Row
Cells(letztezeile + 2, 1).Formula = "=SumIf(A2:A" & letztezeile & ","">0"")/12"
Range("A" & letztezeile).Copy
Range("A" & letztezeile + 2).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
Grüße
Burghard
Anzeige
ein paar Anmerkungen
06.12.2017 15:39:20
Werner
Hallo Burghard,
dein Code mit ein paar Änderungen:
Option Explicit
Sub Zusammenführen()
Dim wsQuelle As Worksheet, wsZiel As Worksheet
Dim anzQuelle As Long, anzZiel As Long
Application.ScreenUpdating = False
Set wsZiel = Worksheets("Auswertung")
anzZiel = wsZiel.Cells(wsZiel.Rows.Count, 1).End(xlUp).Row
wsZiel.Range("a2:b" & anzZiel).ClearContents
wsZiel.Range("a2:b" & anzZiel).Interior.ColorIndex = xlNone
For Each wsQuelle In ThisWorkbook.Worksheets
If wsQuelle.Name  "Auswertung" Then
anzZiel = wsZiel.Cells(wsZiel.Rows.Count, 1).End(xlUp).Row
anzQuelle = wsQuelle.Cells(wsQuelle.Rows.Count, 7).End(xlUp).Row
wsQuelle.Range("G2:H" & anzQuelle).Copy Destination:=wsZiel.Range("a" & anzZiel + 1)
End If
Next wsQuelle
wsZiel.Range("A1") = "Ausgaben"
wsZiel.Range("B1") = "Wofür"
anzZiel = wsZiel.Cells(wsZiel.Rows.Count, 1).End(xlUp).Row
wsZiel.Cells(anzZiel + 2, 1).Formula = "=SumIf(A2:A" & anzZiel & ","">0"")/12"
wsZiel.Range("A" & anzZiel).Copy
wsZiel.Range("A" & anzZiel + 2).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
Set wsZiel = Nothing
Application.ScreenUpdating = True
End Sub
1. Niemals Code ohne dass die Variablen deklariert sind
2. Benutze oberhalb des Makros Option explicit, das zwingt dazu die Variablen zu deklarieren
3. Benutze "sprechende" Namen für deine Variablen, so ist der Code besser zu lesen. Mit ws1, ws2, ws3 hast du mehr Probleme dich im Code zurecht zu finden als wenn du wsQuelle, wsZiel wsZiel2 verwendest (das ist zumindest meine Meinung).
4. Du beginnst bei der Ermittlung der letzten Zeile bei Zeile 65356. Die neueren Excel-Versionen haben aber deutlich mehr Zeilen. Wenn du mit deinem Code auf eine neuere Version umsteigst, dann beginnst du mit der Suche nach der letzten belegten Zeile quasi mitten in der Tabelle. Mit wsZiel.Cells(wsZiel.Rows.Count, 1).End(xlUp).Row beginnst du immer ganz am Ende der Tabelle, egal welche Excel-Version du benutzt. Ganz richtig ist das eigentlich auch nicht, nämlich dann, wenn deine Spalte bis zur letzten Zeile befüllt ist, was aber wohl eher nie vorkommen wird.
5. Hier For i = 1 To 12 gehst du von Blatt 1 bis Blatt 12 in einer Schleife über die Blätter. Das funtioniert so lange, so lange deine Quellblätter an Stelle 1 bis Stelle 12 in der Auflistung stehen. Verschieb mal in deiner Datei Testweise das Auswertungsblatt von der letzten Stelle an die erste Stelle und lass den Code laufen. Dann fehlen dir die Daten von Blatt 12, weil das jetzt an Stelle 13 steht.
Mit einer For Each - Schleife kannst du über alle Blätter der Datei gehen, an welcher Stelle die Blätter dann stehen ist egal. Hierbei musst du dann nur darauf achten, dass u.U. weitere Blätter ausgenommen werden müssen. Fügst du beispielsweise ein weiteres Blatt "Jahresliste" in die Datei ein, dann muss das hier If Sheets(i).Name "Auswertung" Then auch mit ausgenommen werden, wenn es nicht in die Auswertung einfließen soll. If Sheets(i).Name "Auswertung" And Sheets(i).Name "Jahresliste" Then
6. Nicht Sheets benutzen sondern Worksheets
7. Hier
Range("A" & letztezeile).Copy
Range("A" & letztezeile + 2).PasteSpecial Paste:=xlPasteFormats

fehlt die Referenzierung auf das entsprechende Blatt. Das hat zur Folge, dass die Daten aus den Zellen des gerade aktiven Blattes benutzt werden. Wenn du die Schaltfläche zum Start deines Makros z.B. vom derzeitigen Blatt auf ein anderes legst, dann wird dieses Blatt benutzt.
8. Variablen die mit Set zugewiesen werden, sollten am Ende des Codes sicherheitshalber wieder geleert werden.
Gruß Werner
Anzeige
AW: ein paar Anmerkungen
06.12.2017 16:14:04
Burghard
Hallo Werner,
vielen, vielen Dank, dass Du Dir soviel Arbeit gemacht hast! :-) Danke auch für die vielen Hinweise und Tipps! Ich habe sie einmal durchgelesen, muss sie mir aber ausdrucken und die Dinge Stück für Stück durchgehen. Bringt mich wieder ein kleines Stück weiter! Vielen Dank nochmals!
Grüße
Burghard
Gerne u. Danke für die Rückmeldung. o.w.T.
06.12.2017 16:25:24
Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige