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

Schleife läuft extrem lange

Schleife läuft extrem lange
11.11.2020 19:08:01
Mani
Guten Abend
ich habe in meinem Code drei Schleifen eingebaut jede Schleife läuft über ca 5000 Zeilen
Erste:
LetzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
a = 1
i = a
Ende = LetzteZeile
Zusatz = Right(Cells(a, 1).Value, 11)
Do
If Right(Cells(i + 1, 1).Value, 11) Zusatz Then
Rows(i + 1).Insert
a = i + 2
Zusatz = Right(Cells(a, 1).Value, 11)
i = i + 1
Ende = Ende + 1
End If
i = i + 1
Loop Until i = Ende
Zweite und Dritte:
Set rngBereich = Range("I1:I" & LetzteZeile)
For Each rngCell In rngBereich
With rngCell
.NumberFormat = "General"
If IsDate(.Text) Then
.Value = DateValue(.Text)
End If
End With
Next
Set rngBereich = Range("M1:M" & LetzteZeile)
For Each rngCell In rngBereich
With rngCell
.NumberFormat = "General"
If IsDate(.Text) Then
.Value = DateValue(.Text)
End If
End With
Next
Es funktioniert alles einwandfrei und beim ersten Testen lief auch alles relativ zugig ab.
Nur jetzt beim dritten oder vierten ausführen dauert das ganze eine Ewigkeit.
Meine CPU zu schießt hoch auf 100 % .
Und wenn ich abreche und gucke wie weit es gelaufen ist , ist nicht wirklich viel zu sehen.
Hat einer von euch eine Idee woran das liegen kann?
Kann ich es vielleicht anders umsetzen das es schneller geht und die CPU nicht so überlastet?
Habe ich Grundsätzlich was verkehrt gemacht ?
Bildschirm Aktualisierungen und sowas habe ich schon ausgestellt.
Würde mich über jede Hilfe freuen.
Viel Grüße
der Manni

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

Betreff
Datum
Anwender
Anzeige
AW: Schleife läuft extrem lange
11.11.2020 19:18:53
Daniel
Hi
Zellen einzeln bearbeiten per Schleife ist langsam, weil Excel bei jeder Zellwertänderung eine Menge zu tun hat.
Wann immer möglich, sollte man Zellen nicht einzeln, sondern immer als geschlossenen Zellblock in einem Schritt ändern.
das gilt insbesondere für das Einfügen und Löschen von Zeilen.
hierbei kann Sortieren eine große Hilfe sein, denn im Sortieren ist Excel sehr schnell.
beschreib mal, was du machen willst und lade eine kleine Beispieldatei hoch, die auf dem ersten Blatt zeigt, wie die Ausgangsdaten aussehen und auf dem zweiten, wie das Ergebnis sein soll, hierbei reichen ein paar zeilen.
ich zeige dir dann einen Code, wie das schneller geht.
zu den letzten beiden Schleifen:
wende mal DATEN - DATENTOOLS - TEXT IN SPALTEN auf die beiden Spalten an.
das kann Texte, die wie Zahlen oder Datumswerte aussehen in solche wandeln und ist sehr schnell.
Der Recorder ist dein Freund.
Gruß Daniel
Anzeige
AW: Schleife läuft extrem lange
11.11.2020 19:37:37
ChrisL
Hi
Nebst allgemeiner Optimierung (siehe Daniel), vermute ich eine Endlosschleife.
Wenn du Zeilen einfügst, dann korrigierst du mit i+1 aus. Wenn es blöd läuft, wird das Ende übersprungen und der Code läuft ins Nirvana.
For i = LetzteZeile To 1 Step -1
If Right(Cells(i + 1, 1).Value, 11)  Zusatz Then ...
If IsDate(Cells(i, 9)) Then ...
If IsDate(Cells(i, 13)) Then ...
Next i
Also rückwärts und die 3 Schleifen zusammenfassen.
cu
Chris
AW: Schleife läuft extrem lange
11.11.2020 20:15:15
Mani
Hallo ,
erstmal danke für die Unterstützung.
Text in Spalte mit dem Makrorekorder habe ich probiert.
Der Code läuft durch allerdings wird es nicht umgesetzt.
Ich versuche in meinem ersten Code alle gleichen in Reihenfolge zu bringen und jetzt mal wenn was neues kommt eine Leerzeile einzufügen.
Überschrift
Leerzeile
AA
AA
Leerzeile
AC
AC
AC
Leerzeile
BD
BD
usw
Schleife zusammenfassen und rückwärts um nicht ins leere zu laufen verstehe ich und danke für den Tipp nur wenn ich ehrlich bin kriege ich das aktuell noch nicht hin.
Vielen vielen Dank für die Unterstützung.
Gruß
der Mani
https://www.herber.de/bbs/user/141482.xlsm
Anzeige
AW: Schleife läuft extrem lange
11.11.2020 20:08:47
Daniel
Die erste Schleife könnte man durch diesen Code ersetzen, dass sollte schneller sein.
zuerst werden per Formel die Zeilen markiert, nach denen Leerzeilen eingefügt werden sollen, danach werden Leerzeilen an diesen Positionen "einsortiert".
Da Excel im Sortieren sehr schnell ist, sollte das auch bei 5000 Zeilen zügig sein:
Dim c As Long
With ActiveSheet.UsedRange
c = .Columns(.Columns.Count + 1).Column
With .Columns(c).Resize(, 2)
.Columns(1).FormulaR1C1 = "=Row()"
.Columns(2).FormulaR1C1 = "=IF(RIGHT(RC1,11)RIGHT(R[1]C1,11),Row(),"""")"
.Formula = .Value
.Columns(2).Cut .Columns(1).Offset(.Rows.Count)
End With
End With
With ActiveSheet.UsedRange
.Sort key1:=.Cells(1, c), order1:=xlAscending, Header:=xlNo
.Columns(c).Resize(, 2).ClearContents
End With
Gruß Daniel
Anzeige
AW: Schleife läuft extrem lange
11.11.2020 20:41:50
Mani
Hallo ,
wow......
konnte es nur in der Beispieldatei testen aber das ist echt schnell und funktioniert perfekt.
Probiere es morgen in der eigentlichen Datei aus. Meine Frau ist schon am meckern das ich schon wieder so lange am PC sitze...
Hätte ich so nicht hingekriegt. Mal wieder was gelernt.
Eine Frage hätte ich noch.
Ich muss die Leerzeilen danach wieder füllen.
Aktuell mach ich das so:
LetzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To LetzteZeile - 1
If IsEmpty(Cells(i + 1, 2)) Then Cells(i + 1, 2) = Cells(i + 2, 2)
If IsEmpty(Cells(i + 1, 3)) Then Cells(i + 1, 3) = Cells(i + 2, 3)
If IsEmpty(Cells(i + 1, 4)) Then Cells(i + 1, 4) = "Gesamt" & Cells(i + 2, 3)
If IsEmpty(Cells(i + 1, 5)) Then Cells(i + 1, 5) = Cells(i + 2, 5)
If IsEmpty(Cells(i + 1, 6)) Then Cells(i + 1, 6) = Cells(i + 2, 6)
If IsEmpty(Cells(i + 1, 7)) Then Cells(i + 1, 7) = Cells(i + 2, 7)
If IsEmpty(Cells(i + 1, 8)) Then Cells(i + 1, 8) = Cells(i + 2, 8)
If IsEmpty(Cells(i + 1, 9)) Then Cells(i + 1, 9) = Cells(i + 2, 9)
If IsEmpty(Cells(i + 1, 11)) Then Cells(i + 1, 11) = Cells(i + 2, 11)
If IsEmpty(Cells(i + 1, 12)) Then Cells(i + 1, 12) = Cells(i + 2, 12)
If IsEmpty(Cells(i + 1, 13)) Then Cells(i + 1, 13) = Cells(i + 2, 13)
Next i
Kann man das auch verbessern / beschleunigen ?
Ich gehe mal davon aus das ich auch dies zu umständlich gemacht habe.
Vielen Dank
Viele Grüße
der Mani
Anzeige
AW: Schleife läuft extrem lange
11.11.2020 21:03:05
Daniel
kann man optimieren.
du übernimmst ja im großen und Ganzen den Wert aus der Zelle drunter.
Markier mal den ganzen Zellbereich der Tabelle und klicke dann START - BEARBEITEN - SUCHEN UND AUSWÄHLEN - INAHLTE - LEERZELLEN.
Gib dann die Formel ein "=Wert aus Zelle drunter" (einfacher Zellbezug auf die darunter liegende Zelle) und schließe die Eingabe mit STRG+ENTER ab.
kopiere dann den ganzen Bereich und füge ihn an gleicher Stelle als Wert ein.
zeiche das mit dem Recorder auf und schau dir den aufgezeichneten Code an, daraus solltest du dann ableiten können, wie du das optimieren kannst.
gruß Daniel
Anzeige
AW: Schleife läuft extrem lange
11.11.2020 21:07:31
Mani
Vielen Dank
morgen wird getestet und versucht es umzusetzen.
Frau ist am meckern deswegen ist für heute Schluss.
Vielen vielen Dank
Gruß
der Mani

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige