Die schnellste Maximumsfunktion

Schon mal gefragt wie man am schnellsten das Maximum von zwei Werten bestimmt? Mit wenig Arbeit und der Worksheet-Funktion MAX? Oder doch lieber eine eigene Funktion schreiben? Vielleicht reicht auch eine Wenn-Dann-Abfrage?

Die WorksheetFunction

Über Application.WorksheetFunction.max(a, b) kann der größere Wert von a und b bestimmt werden.

Die eigene Funktion

Eine einfache selbstgeschriebene Max-Funktion bestimmt ebenfalls den größeren Wert von a und b.

Private Function MaxUsingOwnFunction(a As Double, b As DoubleAs Double
    If a > b Then
        MaxUsingOwnFunction = a
    Else
        MaxUsingOwnFunction = b
    End If
End Function

Code eingefügt mit Syntaxhighlighter 4.15

Die einfache Wenn-Abfrage

Denkbar ist es auch den größeren Wert von a und b direkt im Quellcode zu ermitteln. Dann wäre folgender Quellcode einzufügen.

        If a > b Then
            max = a
        Else
            max = b
        End If

Code eingefügt mit Syntaxhighlighter 4.15

Die verbesserte Wenn-Abfrage?

Falls einer der Werte vermutlich größer ist, wäre auch diese Abfrage denkbar:

    'Falls a meistens größer ist als b
        max = a
        If b > a Then max = b

Code eingefügt mit Syntaxhighlighter 4.15

Der Performance Test

Mit folgendem Quellcode wurde die durchschnittliche Laufzeit pro Max-Ermittlung bestimmt.

Sub Main()
    Dim Timer As clsTimer
    Dim a As Double, b As Double, max As Double
    Dim i As Long
    Const Iterations = 100000

    Set Timer = New clsTimer
    a = 20
    b = 10

    Timer.Start
    For i = 1 To Iterations
        max = Application.WorksheetFunction.max(a, b)
    Next
    Debug.Print Timer.Stopp

    Timer.Start
    For i = 1 To Iterations
        max = MaxUsingOwnFunction(a, b)
    Next
    Debug.Print Timer.Stopp

    Timer.Start
    For i = 1 To Iterations
        If a > b Then
            max = a
        Else
            max = b
        End If
    Next
    Debug.Print Timer.Stopp

    Timer.Start
    For i = 1 To Iterations
    'Falls a meistens größer ist als b
    'kaum besser aber auch nicht schlechter!
        max = a
        If b > a Then max = b
    Next
    Debug.Print Timer.Stopp
End Sub

Code eingefügt mit Syntaxhighlighter 4.15

Hier das Ergebnis!

Und was lernen wir daraus? Vermeide Worksheetfunctions (gilt natürlich nur im VBA-Code :-))! Schreibe einfach!

AnhangGröße
CompareMaxFunctions.xls43 KB
CompareMaxFunctions.gif34.13 KB
Your rating: Keine Average: 5 (1 vote)