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

Makro umschreiben

Makro umschreiben
02.12.2016 11:52:07
John
Hallo zusammen,
ich würde gerne ein bereits funktionierendes Makro überarbeiten damit es schneller wie bisher (2 Stunden) durchläuft...
Er springt bei dem unten geposteten Teilauszug des Makros von Tabellenblatt "Saldovortrag" zu Tabellenblatt "Anfangsbestand"...
immer und immer wieder. Hin und her. Für ca. 12.000 Zeilen (also 12.000 x 5 Zellenwerte = 60.000 mal)...
Ich vermute, dass dies der Grund ist, warum das Makro so lange läuft.
Kann man diesen Part insoweit abändern, dass er nur 1x zu Tabellenblatt "Saldovortrag" springt, sich die 5 Werte merkt und dann bei Tabellenblatt "Anfangsbestand" einfügt? Oder wird das schwierig, weil hier u.a. eine Subtraktion stattfindet (z.B. hier Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 20) = Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 19) - Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 5) )
Hier der Ausschnitt:
Function AbgleichAnfangsbestand()
zeileAB = 2
makrodatei = ActiveWorkbook.Name
LetzteZeile = Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(Rows.Count, 1).End(xlUp).Row
Do Until zeileAB > LetzteZeile
zeileSV = 2
Do Until Workbooks(makrodatei).Sheets("Saldovortrag").Cells(zeileSV, 1) = ""
If Workbooks(makrodatei).Sheets("Saldovortrag").Cells(zeileSV, 9) = Workbooks( _
makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 18) Then
Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 19) = Workbooks( _
makrodatei).Sheets("Saldovortrag").Cells(zeileSV, 4)
Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 20) = Workbooks( _
makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 19) - Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 5)
Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 21) = Workbooks( _
makrodatei).Sheets("Saldovortrag").Cells(zeileSV, 8)
Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 22) = Workbooks( _
makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 21) - Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 16)
Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 23) = Workbooks( _
makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 15) - Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 16)
End If
zeileSV = zeileSV + 1
Loop
zeileAB = zeileAB + 1
Loop
End Function

Ich bitte um Unterstützung... da meine Kenntnisse bislang noch nicht so fortgeschritten sind ;)
Vielen Dank.
Gruß
John

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro umschreiben
02.12.2016 11:55:30
John
Für ca. 12.000 Zeilen (also 12.000 x 5 Zellenwerte = 60.000 mal)...
ehm... 12.000 Zeilen jeweils x 5 x 2 = 120.000 mal ^^
AW: Makro umschreiben
02.12.2016 12:14:51
John
Wäre so etwas in der Art sinnvoll?
Oder ist das totaler Quatsch? :) Danke!
Function AbgleichAnfangsbestand()
Dim Muh1, Muh2, Muh3, Muh4, Muh5
zeileAB = 2
makrodatei = ActiveWorkbook.Name
LetzteZeile = Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(Rows.Count, 1).End(xlUp).Row
Muh1 = Workbooks(makrodatei).Sheets("Saldovortrag").Cells(zeileSV, 4)
Muh2 = Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 19) - Workbooks(makrodatei) _
.Sheets("Anfangsbestand").Cells(zeileAB, 5)
Muh3 = Workbooks(makrodatei).Sheets("Saldovortrag").Cells(zeileSV, 5)
Muh4 = Workbooks(makrodatei).Sheets("Saldovortrag").Cells(zeileSV, 8)
Muh5 = Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 15) - Workbooks(makrodatei) _
.Sheets("Anfangsbestand").Cells(zeileAB, 16)
Do Until zeileAB > LetzteZeile
zeileSV = 2
Do
Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 19) = Muh1
Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 20) = Muh2
Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 21) = Muh3
Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 22) = Muh4
Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 23) = Muh5
End If
zeileSV = zeileSV + 1
Loop
zeileAB = zeileAB + 1
Loop
End Function

Anzeige
Beispieldatei?
02.12.2016 13:21:24
Michael
Hi John,
optimieren läßt sich immer, aber mit einer Beispieldatei mit ein paar 100 Testwerten geht das schöner.
Die Kernfrage ist die Abfrage:
If Workbooks(makrodatei).Sheets("Saldovortrag").Cells(zeileSV, 9) = Workbooks( _
makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 18) Then

Stehen da eindeutige (nicht mehrmals vorkommende) Werte drin?
Schöne Grüße,
Michael
AW: Beispieldatei?
05.12.2016 14:54:39
John
Hallo Michael,
das Makro kopiert unterschiedliche Werte vom Tabellenblatt "Saldovortrag" in das Tabellenblatt "Anfangsbestand". Pro Zeile sind das 5 Werte.
Er springt bei jedem Wert den er kopiert doch, wenn ich die Zeile richtig verstehe:
Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 19) = Workbooks(makrodatei).Sheets("Saldovortrag").Cells(zeileSV, 4)
Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 20) = Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 19) - Workbooks(makrodatei).Sheets("Anfangsbestand").Cells(zeileAB, 5)
erst vom Tabellenblatt "A..." zum Tabellenblatt "S..." und wieder zurück.
Und dann das gleiche Spiel von vorne..
Kann man stattdessen ihn erst auf Tabellenblatt "S..." springen lassen, dort 5 Werte die benötigt werden kopieren und dann direkt beim anderen Tabellenblatt einfügen lassen. Dies würde doch wesentlich schneller gehen?
Danke!
Anzeige
AW: Beispieldatei?
05.12.2016 16:54:06
Michael
Hi John,
bitte lade eine Beispieldatei hoch und beantworte meine Frage.
Gruß,
M.
AW: Makro umschreiben
02.12.2016 13:07:33
Mobs2b
moin,
ich bin mir nicht sicher, ob ich das richtig verstanden habe, was du da machst, jedoch denke ich, dass es auch über den range befehl statt einer schleife laufen sollte...

Workbooks("makrodatei.xlsx").Worksheets("Anfangsbestand").Activate
Range(Cells(zeileAB, 19), Cells(letztezeile,19)).Copy
Workbooks("Saldovortrag").Worksheets(1).Activate
Range(Cells(zeileSV, 4), Cells(letztezeile,4)).PasteSpecial
das kannst du zumindest für die beiden befehle machen, die nur übertragen werden..?
bei der Subtraktion könnte man das als Array speichern... oder im tabellenblatt eine reihe für  _
die Ergebnisse nehmen und diese dann komplett kopieren...
Mit freundlichem Gruß
der mobs

Anzeige
AW: Makro umschreiben
05.12.2016 15:01:05
John
Hallo Mobs :)
danke für die Antwort.
Aber würde das Makro bei deinem Vorschlag nicht genauso wie bisher von Tabellenblatt "A..." zu Tabl. "S..." hin und herspringen?
Workbooks("makrodatei.xlsx").Worksheets("Anfangsbestand").Activate
Range(Cells(zeileAB, 19), Cells(letztezeile,19)).Copy
Workbooks("Saldovortrag").Worksheets(1).Activate
Range(Cells(zeileSV, 4), Cells(letztezeile,4)).PasteSpecial
Mein Grundgedanke war eben dieser:
Momentan springt das Makro bei jeder Zeile vom Tabellenblatt "A..." ins Tabellenblatt "S..." kopiert dort ein Wert und springt wieder ins Tabellenblatt "A..." zurück und fügt es dort in eine bestimmte Zelle ein. Dann geht das Spiel von vorne los... und das 5x je Zeile.... bei ungefähr 24.000 beschriebenen Zeilen ... springt er also ziemmmlich oft hin und her.
Kann man ihm nicht gleich sagen, spring auf Tabellenblatt "S..." kopiere 5 Werte und füge Sie bei Tabelle "A..." dort dort und dort ein...? So würde es doch bestimmt viel schneller laufen?
Das Makro braucht derzeit ca. 2Std.
Gruß
John
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige