Hallo,
@Ralf
Doch ich glaube dir. Ich hatte auf diesen Teil nicht geachtet und es war mir auch nicht bewusst.
Mit der Nutzung der Arrays und des Dictionary wurde die Laufzeit bei vollem Datenbestand von 174 Sekunden auf 0,375 Sekunden reduziert.
Mit deiner Ergänzung könnte man (bei <100 Zellen) noch ca. 0,0001 Sekunden sparen.
Sollte auch nur eine Zusatzinfo sein und bezog sich eigentlich auf den Threadtitel "schnellerer Code".
(der ja durchaus mal eine Fundstelle bei Tante G. sein könnte)
Bei den paar Zellen ist der Unterschied natürlich homöopathisch. :90:
Gruß Ralf
@RPP
Ich glaube dich nicht.
Code:
Sub M_snb()
sn = UsedRange.Formula
t0 = Timer
For j = 1 To 100
UsedRange.Value = UsedRange.Value
UsedRange.Formula = sn
Next
t1 = Timer - t0
t2 = Timer
For j = 1 To 100
UsedRange.Copy
UsedRange.PasteSpecial -4163
UsedRange.Formula = sn
Next
t3 = Timer - t2
MsgBox t1 & vbLf & t3
End Sub
Formula A: "=G1"
Range: A1:F300
Value=Value
1.87
Pastespecial
3.35
Rand() is volatile das könnte interferieren.
Ich musste schmunzeln, snb!
Du weist, dass ich Deine Kompetenz sehr schätze!
Aber:
Beweisführung geht anders!
Du solltest das Schreiben der Formel weglassen, dann klappt es auch mit der Vergleichbarkeit der Methoden.
Ich gehe davon aus, dass MS mit der .PasteSpecial-Methode den Link zur ursprünglichen Formel löscht, so dass sie erst mühsam wieder in den Bereich geschrieben werden muss (incl. Neuberechnung).
Deshalb habe ich das Löschen und Neuschreiben in den Bereich über eine externe Sub() gemacht und dies von der Zeitberechnung ausgeschlossen.
Gruß Ralf
@RPP
Wenn jeder Prozedur usedrange.formula=sn enthällt sollte das ausgleichen.
Aber ohne ist pastespecial ca. 5.3 fach schneller.
Bitte erklären Sie mir das..
Zitat:Bitte erklären Sie mir das..
Nö! Mache ich nicht! :19:
Dazu müsste ich in Redmond angestellt sein.
Bis dahin bleibt uns Beiden nur die Erkenntnis, dass die Programmierer einen schnelleren Weg gefunden haben, isn't it?
Gruß Ralf