Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Berechnungsdauer einer UDF messen

Betrifft: Berechnungsdauer einer UDF messen von: {Boris}
Geschrieben am: 02.01.2008 20:58:39

Hi Leute,

wie kann man die Berechnungsdauer einer UDF messen, z.B. für folgendes Dummy-Beispiel:


Function Dummy() As Long
Dim x As Long
For x = 1 To 200000000
Next
Dummy = 1
End Function



Tabelle1

 A
11

Formeln der Tabelle
ZelleFormel
A1=dummy()


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4

Wie lange hat der Rechner nun gerödelt?

Grüße Boris

  

Betrifft: AW: Berechnungsdauer einer UDF messen von: K.Rola
Geschrieben am: 02.01.2008 21:08:16

Hallo,

glückliches Jahr 2008, Liebes.

Function Dummy() As Long
Dim x As Long, Start As Long
Start = Timer
For x = 1 To 200000000
Next
Dummy = 1
MsgBox Timer - Start
End Function



Gruß K.Rola


  

Betrifft: AW: Berechnungsdauer einer UDF messen von: {Boris}
Geschrieben am: 02.01.2008 21:13:02

Hi Hasi,

ebenfalls ein frohes Neues!

Bei diesem Dummy war das gut messbar - verkürze ich die Schleife auf 200, dann kommt ein negatives(?!) Ergebnis raus. Wie geht denn das zusammen?

G+K

Boris


  

Betrifft: AW: Berechnungsdauer einer UDF messen von: K.Rola
Geschrieben am: 02.01.2008 21:37:50

Hallo,

Private Declare

Function GetTickCount& Lib "Kernel32" ()

Function Dummy() As Long
Dim x As Long, tc As Long
tc = GetTickCount
For x = 1 To 200000000
Next
Dummy = 1
MsgBox GetTickCount - tc
End Function



Wenn du es noch geanuer brauchst, steigt der Aufwand gleich mächtig, ist aber machbar.

Gruß K.Rola


  

Betrifft: AW: Berechnungsdauer einer UDF messen von: {Boris}
Geschrieben am: 02.01.2008 21:47:20

Liebes,

nochmals besten Dank!

Wenn du es noch geanuer brauchst, steigt der Aufwand gleich mächtig, ist aber machbar.

An Deinen pfiffigen Lösungen bin ich natürlich immer interessiert. :-)
Das mach ich aber mal von Deiner Zeit und Lust, ganz nach Deinem Ausspruch

Wenn man gerade nichts Besseres vorhat...

abhängig ;-)

Grüße Boris


  

Betrifft: AW: Berechnungsdauer einer UDF messen von: Hajo_Zi
Geschrieben am: 02.01.2008 21:08:40

Hallo Boris,

in Sekunden?


Option Explicit

Function Dummy() As Date
    Dim DaZeit As Date
    DaZeit = Time
    Dim x As Long
    For x = 1 To 200000000
    Next
    Dummy = Time - DaZeit
End Function



GrußformelHomepage


  

Betrifft: AW: Berechnungsdauer einer UDF messen von: {Boris}
Geschrieben am: 02.01.2008 21:16:10

Hi Hajo,

danke. In diesem Beispiel kann man sicherlich Sekunden messen. Es sollte aber auch im Bruchteilsbereich funktionieren.

Grüße Boris


  

Betrifft: AW: Berechnungsdauer einer UDF messen von: MichaV
Geschrieben am: 02.01.2008 21:18:07

Hallo Boris,



Option Explicit

Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private lngStartTime As Long

Public Sub StartTimer()
  lngStartTime = timeGetTime
End Sub

Public Function EndTimer() As Long
  EndTimer = timeGetTime - lngStartTime
End Function

Function Dummy() As Long
StartTimer
Dim x As Long
For x = 1 To 200000
Next
Dummy = 1
MsgBox EndTimer & " ms"
End Function


     Code eingefügt mit Syntaxhighlighter 4.6


Gruß- Micha

PS: Rückmeldung wäre nett.
PPS: http://www.online-excel.de/fom/fo_read.php?f=1&bzh=10776&h=10770


  

Betrifft: AW: Berechnungsdauer einer UDF messen von: {Boris}
Geschrieben am: 02.01.2008 21:28:59

Hi Micha,

besten Dank. Bei kleiner Schleife zeigt´s zwar immer Null - aber ich brauch´s auch nur für etwas umfangreichere UDFs. Und scheint Dein Vorschlag sehr gut zu sein!

Grüße Boris


  

Betrifft: AW: Berechnungsdauer einer UDF messen von: MichaV
Geschrieben am: 02.01.2008 21:36:29

Hallo Boris,

zu K.Rolas Variante (ich wollte mich oben nicht in Eurer kuscheliges Gespräch einmischen): da kommt die Ungenauigkeit bei der Zuweisung zum Long- Datentyp zum Vorschein. Versuch(t) mal



Option Explicit

Function Dummy() As Long
Dim x As Long, Start As Long, Ende As Long
Start = Timer
For x = 1 To 200
Next
Dummy = 1
Ende = Timer
MsgBox Ende - Start
End Function


     Code eingefügt mit Syntaxhighlighter 4.6


..allerdings gibts hier um Mitternacht Probleme, weil Timer dann auf 0 zurückspringt. Bei der API- Variante gibts nur alle 48 Tage Probleme.

Gruß- Micha


  

Betrifft: AW: Berechnungsdauer einer UDF messen von: {Boris}
Geschrieben am: 02.01.2008 21:43:44

Hi Micha,

nochmals danke. Aber hier hast Du - glaube ich - wahrscheinlich falsch reinkopiert. Die Variablen sollten wohl alle vom Typ Double sein ;-). Hab´s zumindest so getestet - und funktioniert.

Grüße Boris


  

Betrifft: AW: Berechnungsdauer einer UDF messen von: MichaV
Geschrieben am: 02.01.2008 21:57:09

Hallo Boris,

die Timer- Funktionen geben Long zurück. Warum soll ich dann alles als Double deklarieren?

Gruß- Micha


  

Betrifft: Dann hab ich Dich falsch verstanden... von: {Boris}
Geschrieben am: 02.01.2008 22:07:31

Hi Micha,

...da kommt die Ungenauigkeit bei der Zuweisung zum Long- Datentyp zum Vorschein...

Sei´s drum - et lüppt!

Grüße Boris


  

Betrifft: AW: Dann hab ich Dich falsch verstanden... von: MichaV
Geschrieben am: 02.01.2008 22:15:56

Hallo,

ich hab mich auch gewundert. Timer gibt den Daten vom Typ Single zurück, und das wird in diesem Beispielcode in eine Long- Variable umgewandelt.

Es hätte also gereicht:

...
Dim x As Long, Start As Single
Start = Timer
...

Hatte ich nicht gesehen, und nun wieder was gelernt.

So, und nun wirklich Schluß.

Gruß- Micha


  

Betrifft: AW: Berechnungsdauer einer UDF messen von: Uduuh
Geschrieben am: 02.01.2008 22:13:49

Hallo Micha,
aus der Hilfe:

Timer-Funktion
      

Gibt einen Wert vom Typ Single zurück, der die Anzahl der seit Mitternacht vergangenen Sekunden  _
angibt.

Syntax

Timer

Bemerkungen

Unter Microsoft Windows gibt die Timer-Funktion Bruchteile einer Sekunde zurück. Auf dem Macintosh ist die Einheit eine Sekunde.





Gruß aus’m Pott
Udo



  

Betrifft: von: MichaV
Geschrieben am: 02.01.2008 22:17:25

Hallo Udo,

ja danke :o) Irgendwie hatte ich das auch gerade in der Hilfe gelesen...

Gruß- Micha