Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

gibt es einen schnelleren code?
#21
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. Blush
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#22
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#23
@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.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#24
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#25
@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..   Undecided
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#26
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste