|
Leider bietet Visual Basic keine eingebauten Funktionen zur
Ermittlung des kleinsten oder größten Wertes in einem Array oder
einer Auflistung (auch Sammlung, Collection genannt). Eine eigene
Implementierung solcher Funktionen ist jedoch nicht schwierig.
Die Funktionen Max und Min können sowohl mit Collections als
auch mit Arrays umgehen. Bei beiden wird jedoch stillschweigend
vorausgesetzt, dass sie miteinander vergleichbare Werte enthalten,
bei Collections zudem auch, dass sie über die Eigenschaft Count
verfügen und ein Element als Voreinstellung unter der Angabe des
Index ausgelesen werden kann. Tritt ein Fehler auf, brechen die
Funktionen ab - der Fehler kann in der aufrufenden Ebene behandelt
werden.
Public Function Max(Data As Variant) As Variant
Dim l As Long
Dim nMax As Variant
Dim nVal As Variant
On Error GoTo Max_Error
If IsObject(Data) Then
For l = 1 To Data.Count
nVal = Data(l)
If nVal > nMax Then
nMax = nVal
End If
Next 'l
Max = nMax
ElseIf VarType(Data) = vbArray Then
For l = LBound(Data) To UBound(Data)
If Data(l) > nMax Then
nMax = Data(l)
End If
Next 'l
Max = nMax
End If
Exit Function
Max_Error:
End Function
Public Function Min(Data As Variant) As Variant
Dim l As Long
Dim nMin As Variant
Dim nVal As Variant
On Error GoTo Min_Error
If IsObject(Data) Then
nMin = Data(1)
For l = 2 To Data.Count
nVal = Data(l)
If nVal < nMin Then
nMin = nVal
End If
Next 'l
Min = nMin
ElseIf VarType(Data) = vbArray Then
nMin = Data(LBound(Data))
For l = LBound(Data) + 1 To UBound(Data)
If Data(l) < nMin Then
nMin = Data(l)
End If
Next 'l
Min = nMin
End If
Exit Function
Min_Error:
End Function
Im Prinzip ist die Funktion Min lediglich die Umkehrung der
Max-Funktion. Allerdings muss der Vergleichsvariablen nMin vor der
Iteration durch die Elemente ein erster Wert zugewiesen werden,
nämlich der Wert des ersten Elements. Anderenfalls könnte es sein,
dass fälschlicherweise der Wert der uninitialisierten Variablen
nMin (dieser ist gleichwertig mit 0) zurückgegeben wird, falls alle
in der Collection bzw. im Array enthaltenen Werte größer als 0
sein sollten.
|