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

VBA: Zeilen kopieren wird langsamer

VBA: Zeilen kopieren wird langsamer
09.02.2021 19:10:11
Adrian
Hallo zusammen,
Stehe da aktuell vor einem Phänomen, dass ich nicht erklären kann.
Habe mir eine Testdatei aufgebaut, bei welcher ich auf Knopfdruck immer die ganze Zeile 6 kopiere
und unterhalb der aktiven Zelle einfüge.
Zusätzlich wird der Wert in der aktivem Zelle berücksichtigt und es wird entsprechend mehrfach eingefügt.
Funktioniert auch soweit.
Habe das VBA auch so aufgebaut, dass die Berechnung / Screenupdating deaktiviert sind und am Ende wieder aktiviert sind.
Beim ersten Mal (Beispiel Zelle B13) funktioniert dies richtig schnell.
Drück ich ein weiteres Mal auf den Button oder ein 3. Mal - wird's immer langsamer.
Kennt jemand dieses Problem - gehe mal davon aus dass es an meinem zusammengewürfelten Code liegt :-)
https://www.herber.de/bbs/user/143769.zip
Danke vorab
Gruss
Adrian

30
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 19:25:21
onur
Ich kann da kein Problem erkennen, der Code braucht immer gleich lang, aber das kann auch an deiner Beispielsdatei liegen. Vielleicht hast du ja in der Originaldatei jede Menge Formeln drin.
P.S.: "Habe das VBA auch so aufgebaut" - brauchst du nicht, das macht Microsoft schon. Du kannst höchstens deine (VBA-) Makros aufbauen. :)
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 19:30:20
Adrian
Hallo Onur,
Danke für deinen Input :-)
Ne, ich mein schon die Testdatei - spätestens beim 3 oder 4. Mal wird's deutlich langsamer....
Gruss
Adrian
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 19:32:06
onur
Du hast beim Klicken immer die selbe Zelle als "aktive Zelle"?
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 19:38:27
Adrian
Ich wechsle auch ab.
Spielt aber keine Rolle ob ich jetzt 3x die gleiche anwähle oder 3 verschieden anwähle.
Anzeige
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 19:49:34
onur
Spielt WOHL eine Rolle, da dein Code so viele Zeilen einfügt, wie in der aktiven Zelle steht - d.h. wenn da 100 steht, werden 100 neue Zeilen hinzugefügt.
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 19:53:28
Adrian
Hallo onur,
Das ist mir schon klar, dass er bei 100 Zeilen länger braucht. :-)
Ich füge zum Beispiel in der Zelle B7 die Zahl 6 ein.
Und drück nacheinander den Button.
Spätestens beim 3. Mal dauert der Vorgang doppelt so lang.
Kann dann aber durchaus sein, dass es beim 4. Mal wider normal geht...
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 20:10:37
onur
Wie gesagt, ich merke nix.
Was hast du denn für einen Rechner?
Das Einfügen von Zeilen ist eigentlich recht rechenintensiv, da ja jede einzelne Zeile nach unten geschoben wird, und je mehr beschriebene Zeilen unterhalb der aktiven Zelle existieren, desto länger dauert es. Unbenutzte Zeilen sind egal, aber alle anderen werden einzeln um je eine Zeile nach versetzt.
Anzeige
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 20:18:17
Adrian
Asus Laptop mit einem i7-3612QM
Gebe ich zu ist nicht mehr der neuste :-)
Habe parallel auf dem Geschäfts-PC einen Test gemacht:
i7-7700
Da merke ich auch keinen Unterschied - wie Du :-)
Dann ist nun endlich die Ursache geklärt
DANKE DIR :-)
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 20:20:09
onur
Hast du denn Multithreadberechnung aktiviert?
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 20:52:18
Adrian
Wo mach ich das?
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 21:00:30
onur
Excel/Optionen/Erweitert/Formeln
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 21:00:40
Adrian
Ist aktiviert 😉
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 21:20:18
onur
Wieviel Kerne zeigt er an?
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 21:30:08
Adrian
8
Ist auf automatisch eingestellt
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 21:34:24
onur
Haben beide Rechner das gleiche Windows und Excel?
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 22:06:51
Adrian
Windows 10 bei beiden
Excel 2016 bei mir
Excel 365 im Geschäft
Anzeige
AW: VBA: Zeilen kopieren wird langsamer
09.02.2021 22:06:53
Adrian
Windows 10 bei beiden
Excel 2016 bei mir
Excel 365 im Geschäft
AW: VBA: Zeilen kopieren wird langsamer
10.02.2021 08:34:38
Daniel
Hi
beim Einfügen von Zeilen muss Excel für jede vorhandene Formel prüfen, ob diese Zellbezüge enthält, die von der Verschiebung betroffen sind und angepasst werden müssen.
Je mehr Formeln du hast, um so länger dauert es.
Das kannst du auch nicht ausschalten.
die erste abhilfe wäre, nicht jede Zelle einzeln per Schleife einzufügen, denn dann muss dieser Prozess für jede eingefügte Zeile wiederholt werden, sondern alle Zeilen gleichzeitig am stück, dann macht Excel diesem Job für alle eingefügten Zeilen im Block gemeinsam:
dh aus der For-Next-Schleife zum Einfügen wird:
Rows(r + i).Resize(Anzahl).Insert Shift:=xlDown
Worksheets("Tabelle1").Rows(Zeile).Copy Destination:=Worksheets("Tabelle1").Rows(r + i).Resize(Anzahl)
Gruß Daniel
Anzeige
AW: VBA: Zeilen kopieren wird langsamer
10.02.2021 09:07:05
Daniel
noch eine Optimierung:
kopieren und Einfügen geht in einem Schrit, wenn du erst kopierst und dann direkt einfügst.
Worksheets("Tabelle1").Rows(Zeile).Copy
Rows(r + i).Resize(Anzahl).Insert Shift:=xlDown 

wenn der Zwischenspeicher gefüllt ist, werden die Inhalte automatisch eingefügt.
gruß Daniel
AW: VBA: Zeilen kopieren wird langsamer
10.02.2021 13:10:59
Adrian
Hallo Daniel,
Danke für deinen Input / Vorschlag :-)
Habe beide Codes mal ausprobiert - irgendwo liegt noch der Wurm drin:
Habe ich die Zahl "1" in der aktiven Zelle drinstehen - wird eine Zeile eingefügt
Bei "2" sind es 4 Zellen
Bei "3" sind es 9 Zellen
usw.
Ich verstehe aber nicht warum? (habe nirgends eine Multiplikation drin)
Gruss
Adrian
Anzeige
AW: VBA: Zeilen kopieren wird langsamer
10.02.2021 13:17:26
Daniel
hi
vermutlich hast du meine Antwort nicht richtig umgesetzt.
beachte, ich schrieb: "aus der For-Next-Schleife zum Einfügen wird"
dh. du musst die komplette For-Next-Schleife austauschen, inklusive dem FOR und dem NEXT, nicht nur den Code dazwischen.
Gruß Daniel
AW: VBA: Zeilen kopieren wird langsamer
10.02.2021 13:13:12
Adrian
Bei dieser Variante werden zusätzlich, die Zellen nicht unterhalb sondern oberhalb eingefügt:
Worksheets("Tabelle1").Rows(Zeile).Copy
Rows(r + i).Resize(Anzahl).Insert Shift:=xlDown
Idealerweise wäre es immer unterhalb der aktiven Zelle :-)
AW: VBA: Zeilen kopieren wird langsamer
10.02.2021 13:21:14
Daniel
dann musst du die richtige Zeilennummer angeben.
die Zeilen werden immer oberrhalb der angegebenen Zeilennummer eingefügt.
wenn sie unterhalb eingefügt werden sollen, musst du noch 1 hinzuaddieren.
Gruß Daniel
Anzeige
AW: VBA: Zeilen kopieren wird langsamer
10.02.2021 13:27:35
Adrian
Stimmt! hatte nicht alles ersetzt.
Nun passt es :-)
Eine bitte habe ich noch, wenn nichts oder der Wert 0 in der Zelle steht soll auch nichts gemacht werden und auch keinen Fehler angezeigt werden.
Habe jetzt folgenden Code:
Sub Zeile_kopieren()
Dim Zeile, Anzahl
Zeile = 6 'Angabe welche Zeile kopiert werden soll -> Auch möglich: Wert vom Tabellenblatt  _
einlesen: Zeile = Worksheets("Tabelle1").Range("A1").Value
Anzahl = ActiveCell.Value 'Hier Anzahl der Kopiervorgänge eingeben -> Auch möglich: Wert vom  _
Tabellenblatt einlesen: Anzahl = Worksheets("Tabelle1").Range("B1").Value
r = ActiveCell.Row
Application.ScreenUpdating = False 'Bildschirmaktualisierung ausschalten
Application.Calculation = xlCalculationManual 'automat.Berechnung ausschalten
Worksheets("Tabelle1").Rows(Zeile).Copy
Rows(r + i + 1).Resize(Anzahl).Insert Shift:=xlDown
Application.Calculation = xlCalculationAutomatic 'automat.Berechnung einschalten
Application.ScreenUpdating = True 'Bildschirmaktualisierung einschalten
End Sub

Anzeige
AW: VBA: Zeilen kopieren wird langsamer
10.02.2021 13:32:31
Daniel
Das solltest du vorher abfragen.
Eine kleinen If-Then solltest du selber hinbekommmen.
Gruß Daniel
AW: VBA: Zeilen kopieren wird langsamer
10.02.2021 13:40:47
Daniel
das "+ i" kannst du weglassen.
ohne Schleife ist diese Variable nicht mehr in Verwednung.
Ist der Code denn jetzt schneller?
Gruß Daniel
AW: VBA: Zeilen kopieren wird langsamer
10.02.2021 14:37:52
Adrian
Hallo Daniel,
Passe ich gerne noch an.
Ja der Code ist jetzt um einiges schneller - gerade von ich 20 Zeilen miteinander einfügen möchte :-)
Mein Laptop hängt teilweise immer noch - aber das legt nicht an der Formel.
Ich habe jetzt noch etwas weiter gedacht und will gerne die Formel in jedem Sheet einsetzten.
Ist es irgendwie möglich, dass die variabel bleibt:
Sprich es wird immer der Blattname eingesetzt in der sich die aktive Zelle befindet.
Es muss dann halt natürlich überall die Zeile 6 entsprechend formatiert werden auf jedem Blatt :-)
Gruss
Adrian
Anzeige
AW: VBA: Zeilen kopieren wird langsamer
10.02.2021 14:41:28
Daniel
HI
wenn der Code in einem allgemeinen Modul steht, einfach vor jedem Cells, Range, Columns, Rows die Angabe des Tabellenblatts (Worksheets("Tabelle1") weglassen oder durch ActiveSheet ersetzen.
Gruß Daniel
Zeilen mehrfach kopieren und einfügen
10.02.2021 14:55:47
Adrian
Hallo Daniel,
Vielen Dank!
Habe die Bedienung "wenn 0 oder leer, dann nichts machen" noch selber hinbekommen
Anbei nochmals der aktuelle Code (auch für andere mit einem ähnlichen Problem)
Sub Zeile_kopieren()
Dim Zeile, Anzahl
Zeile = 6 'Angabe welche Zeile kopiert werden soll -> Auch möglich: Wert vom Tabellenblatt  _
einlesen: Zeile = Worksheets("Tabelle1").Range("A1").Value
Anzahl = ActiveCell.Value 'Hier Anzahl der Kopiervorgänge eingeben -> Auch möglich: Wert vom  _
Tabellenblatt einlesen: Anzahl = Worksheets("Tabelle1").Range("B1").Value
r = ActiveCell.Row
If ActiveCell.Value > 0 Then
Application.ScreenUpdating = False 'Bildschirmaktualisierung ausschalten
Application.Calculation = xlCalculationManual 'automat.Berechnung ausschalten
ActiveSheet.Rows(Zeile).Copy
Rows(r + 1).Resize(Anzahl).Insert Shift:=xlDown
Application.Calculation = xlCalculationAutomatic 'automat.Berechnung einschalten
Application.ScreenUpdating = True 'Bildschirmaktualisierung einschalten
Else
End If
End Sub
Gruss
Adrian
Anzeige
AW: Zeilen mehrfach kopieren und einfügen
10.02.2021 15:23:05
Daniel
noch ein kleiner Tip:
wenn man "richtig" programmiert, dann sind:
Application.ScreenUpdating = False 'Bildschirmaktualisierung ausschalten
Application.Calculation = xlCalculationManual 'automat.Berechnung ausschalten
in der Regel nicht notwendig bzw bringen keine signifikante Verbesserung der Laufzeit des Codes.
wenn das noch was bringt, hat der Code noch optimierungspotential bzw nutzt noch nicht alle möglichkeiten von Excel optimal aus.
Gruß Daniel

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige