Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1076to1080
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

DoWhile 10x langsamer als Next for?

DoWhile 10x langsamer als Next for?
28.05.2009 11:23:27
MBorn
Hallo,
ich habe eine Next for Schleife in eine Do While Schleife verwandelt.
Ein Rechenvorgang, der Vorher maximal 50 Minuten dauerte, kam jetzt
auf 8 Stunden. Ein Rechenvorgang, der vorher bei 3 Minuten lag, kostet
jetzt 16 Minuten.
Warum ist DoWhile so viel langsamer und welche Schleifenabfrage ist
eigentlich am schnellsten?
Gruß,
Born

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: DoWhile 10x langsamer als Next for?
28.05.2009 11:53:53
Rudi
Hallo,
ohne Code kann man garnichts sagen.
Gruß
Rudi
AW: DoWhile 10x langsamer als Next for?
28.05.2009 11:59:13
Rudi
Hallo nochmal,
Do Loop ist tatsächlich erheblich langsamer.
Möglicherweise, weil die Abbruchbedingung immer geprüft werden muss.
50 Minuten erscheint mir aber auch sehr langsam.
Gruß
Rudi
AW: DoWhile 10x langsamer als Next for?
28.05.2009 12:24:14
MBorn
Hi Rudi,
danke fürs Antworten. Ich habe jetzt alles umgestellt und wieder eine Next-For-Schleife
eingebaut und jetzt läufts wieder schneller. Interessant!
Born
AW: DoWhile 10x langsamer als Next for?
28.05.2009 12:25:45
Harald
Ich komme aber nur auf einen Faktor von etwa 2:

Sub test()
Dim t1 As Date
Dim t2 As Date
Dim deltat1 As Date
Dim deltat2 As Date
Dim deltat3 As Date
Dim i As Long
Dim k As Long
k = 1
t1 = Timer()
For i = 1 To 1000000
k = k + 1
Next
t2 = Timer()
deltat1 = t2 - t1
i = 1
t1 = Timer
Do
i = i + 1
Loop While i  0
t2 = Timer
deltat3 = t2 - t1
MsgBox "deltaT1 = " & deltat1 & vbCr & "deltaT2 = " & deltat2 & vbCr & "deltaT3 = " & deltat3
End Sub


Es hängt wohl ganz stark davon ab, was für ein vergleich durchgeführt wird. Der Vergleich zweier Zahlen ist ganz fix erledigt. Kommen aber Strings oder Variants ins Spiel, dauert der Vergleich natürlich länger.
Wie mein Vorredner schon schrieb: ... ohne Code...
Harald

Anzeige
DoWhile 10x langsamer als Next for? @ Harald
28.05.2009 13:20:43
Klaus-Dieter
Hallo Harald,
du führst keine Berechnungen durch, da geht das natürlich schneller.
Es ist schon richtig, ohne den Code kann man das nicht beurteilen. Bei einer Rechenzeit von 8 Stunden! habe ich aber den dringenden Verdacht, dass hier zu allem Überfluss mit Select gearbeitet wird. Ich würde versuchen, das über Arrays zu lösen, dann geht das rattenschnell, höchstens im Minutenbereich.
Viele Grüße Klaus-Dieter

Online-Excel
AW: DoWhile 10x langsamer als Next for? @ Harald
28.05.2009 13:46:26
Rudi
Hallo,

dass hier zu allem Überfluss mit Select gearbeitet wird


sehr wahrscheinlich.
Nicht zu vergessen die wahrscheinlich nicht korrekte Deklaration von Variablen. Alles als Variant ist ne irre Bremse.
Gruß
Rudi

Anzeige
AW: DoWhile 10x langsamer als Next for? @ Harald
28.05.2009 13:46:55
Harald
Hallo Klaus-Dieter,
klar führe ich keine Berechnungen durch. Die sollten eigentlich immer gleich lang dauern, egal wie die Schleifenkontrolle abläuft. Ich wollte mit dem Code nur mal die Vermutung testen und bestätigen, dass die beiden Schleifenkonstrukte für sich genommen schon mal unterschiedlich schnell sind.
Wenn die Berechnung aufwendig ist (50 Minuten bzw. 8 Stunden lassen das vermuten), dann ist der Anteil der Schleifenkontrolle an der Laufzeit immer weniger relevant. Vermutlich wurde im Code mehr umgestellt, als nur von for-next auf do-while.
Falls die Berechnung auf das Tabellenblatt zugreift, findet man hier (http://schmid.tobi.googlepages.com/variantdatenimport) eine gute Möglichkeit, das Ganze zu beschleunigen. Meinst Du das mit "...über Arrays zu lösen."?
Gruß Harald
Anzeige
@ Harald - Link schrottig?
28.05.2009 14:16:17
Klaus-Dieter
Hallo Harald,
der Link läuft ins leere.
Viele Grüße Klaus-Dieter

Online-Excel
Ohne Klammern
28.05.2009 18:55:06
Harald
Kann ich mir nicht erklären, aber irgendwie sind die Klammern wohl Teil des Links geworden, das funktioniert dann nicht. Neuer Versuch:
http://schmid.tobi.googlepages.com/variantdatenimport
Gruß Harald
Anzeige
AW: DoWhile rattenschnell @Klaus-Dieter
28.05.2009 13:49:26
MBorn
Hallo und herzlichen Dank für die Tipps,
"rattenschnell" klingt gut. Dann muß ich Klaus-Dieters Anregung mit den Arrays prüfen. Klaus-Dieter, was genau würdest Du denn in den Array packen?
Ich habe knapp 350000 Datensätze und zwar keine Select-Anweisungen innerhalb
der Schleife, aber einige "Or"-Operatoren verschachtelt. Die könnten zusätzlich Zeit fressen.
Die werde ich auch umabasteln.
Aber was soll in den Array?
Gruß,
Born
AW: DoWhile rattenschnell @Klaus-Dieter
28.05.2009 13:56:44
Rudi
Hallo,

Aber was soll in den Array?


die Daten natürlich.
Gruß
Rudi

Anzeige
AW: Rudi ist seeeehr witzig!
28.05.2009 14:16:40
MBorn
Oh, oh Rudi. Extrem lustig - und wenn ich mehr Ahnung von VBA hätte, - was ich durch den Hinweis auf
VBA bescheiden nicht vorgebe - würde ich vermutlich auch sehr lachen.
Und welche Daten sind gemeint?
Hier eine Kurzfassung des Skripts, damit man eine ungefähre Vorstellung bekommt.

Sub Auswertungen()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For i = Anfang To  Ende
For z5 = 1 To 20
Bedingung für z5
Next z5
If z5 


Gruß,
Born

AW: Rudi ist seeeehr witzig!
28.05.2009 14:24:19
Rudi
Hallo,
du aber auch.
Meine Glaskugel ist leider defekt und das Codefragment hilft auch nicht wirklich.
Gruß
Rudi
Anzeige
AW: DoWhile rattenschnell @Klaus-Dieter
28.05.2009 14:15:10
Klaus-Dieter
Hallo Born,
damit meine ich die Daten in ein Array lesen, dort bearbeiten (also sozusagen im virtuellen Bereich), dann das Ergebnis in die Liste (zurück) schreiben. Das macht in Summe zwei Tabellenzugriffe, sonst tausende. Habe damit schon die Laufzeit von 10 Stunden auf wenige Sekunden gedrückt.
Viele Grüße Klaus-Dieter

Online-Excel
AW: DoWhile rattenschnell @Klaus-Dieter
28.05.2009 14:44:00
MBorn
Hallo Klaus-Dieter,
das klingt gut. Ich werde es ausprobieren.
Wenn aus zwei Spalten eine dritte Spalte berechnet wird, würde das bedeuten:
- spalte 1 in ein Array1
- Spalte 2 in ein Array2
Berechnung innnerhalb eines dritten Arrays und Ausgabe des Endergebnisses ohne Anzeige von
Zwischenergebnissen in Zeilen, oder?
Gruß,
Born
Anzeige
AW: DoWhile rattenschnell @Klaus-Dieter
28.05.2009 15:13:40
Klaus-Dieter
Hallo Born,
nach dem was man auf Grund deiner eher spärlichen Angaben sagen kann, kommt das hin.
Am besten du stellst deinen Quelltext mal ein.
Viele Grüße Klaus-Dieter

Online-Excel
AW: DoWhile rattenschnell @Klaus-Dieter
28.05.2009 18:00:30
MBorn
Hallo Klaus-Dieter,
danke für das Angebot. Hier wäre also ein kleines Beispiel:

Sub Liste_DatumZeit_zusammenfügen2()
Application.Calculation = xlCalculationManual
Zeitspalte = 7
For i = 2 To Range("A350000").End(xlUp).Row
If Cells(i, 3) = Cells(i - 1, 3) Then
Zeit = Cells(i, 2)
Cells(i, Zeitspalte) = Cells(i, 1) + hour(Zeit) / 24 + (Minute(Zeit) + IIf(Second(Zeit) >  _
30, 1, 0)) / 1440
Zeit = Cells(i, Zeitspalte)
Bisz5 = IIf(i  5 _
And Cells(i, 3) = Cells(i - z5, 3) Then
Exit For
End If
Next z5
Cells(i, 5) = IIf(z5   _
30, 1, 0)) / 1440
Cells(i, 5) = i
End If
Next i
Application.Calculation = xlCalculationAutomatic
End Sub


Kurze Erklärung dazu: Erst werden Datum (Spalte A) und Zeit (Spalte B) in Spalte G zusammengefügt.
In Spalte G stehen dann Datum/Zeit-Angaben in unregelmäßigen Minutenabständen, wobei manchmal die selbe Zeit (gleiche Minute) in mehreren Zeilen steht, manchmal in einer, manchmal in keiner. In Spalte E soll die Zeilennummer eingetragen werden, in der die Zeit steht welche von Spalte G, aktuelle Zeile genau 5 Minuten zurück liegt. Also, in G700 steht zum Beispiel 11:25 und in G630 steht 11:20. Dann müßte in Zeile E600 die Zahl 70 stehen.
Wenn Du mir verraten könntest, wie ich das beschleunigen kann, wäre ich Dir mindestens sehr
dankbar.
Gruß,
Born

Anzeige
Gleiche Zeitdifferenz?
29.05.2009 14:02:54
Klaus-Dieter
Hallo Born,
die Sache mit den Uhrzeiten ist mir noch nicht klar. Es kann bei so vielen Datensätzen doch sicher vorkommen, dass die gleiche Zeitdifferenz mehrfach auftritt. Wie soll damit umgegangen werden?
Viele Grüße Klaus-Dieter

Online-Excel
AW: Gleiche Zeitdifferenz?
29.05.2009 14:57:51
MBorn
Moin Klaus-Dieter,
ja, bei gleicher Zeitdifferenz wird immer die Zeile notiert, AB DER diese Zeitdifferenz stattfand.
Beispiel:
zeile: 40 zeit: 12:01
zeile 70 zeit: 12:06
zeile 71 zeit: 12:06
In Zeile 70 und 71 steht beide male 5 als Zeitdifferenz.
Aber, das soll kein Hindernis sein, es geht hier ja nur um das Prinzip, wie
das mit den Arrayformeln zu bewerkstelligen ist. Das könnte ich gut gebrauchen.
Sei gegrüßt,
Born
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige