Kontakt
DSVGO
Mit den unten vorgestellten Funktionen ArrayIndex (bzw. ListIndex) kann ein Array (bzw. eine Parameter-Liste) durchsucht werden. Rückgabewert beider Funktionen ist der Treffer-Index. Wird keine Übereinstimmung gefunden, so wird ein Index kleiner als LBound (bzw. -1) zurückgegeben.
Im folgenden Beispiel wird mit einer einzigen Anweisung ein Zahlwort in seinen entsprechenden Zahlenwert umgewandelt:
'Eingabe: sZahl = InputBox("Zahlwort zwischen Null und Drei?") sZahl = LCase$(sZahl) 'Suche: iZahl = ListIndex(sZahl, "null", "eins", "zwei", "drei") 'Ausgabe: If iZahl < 0 Then MsgBox "ungültige Zahl" Else MsgBox "Zahl = " & iZahl End If
Bei Eingabe von "eins" wird tatsächlich "Zahl = 1" ausgegeben.
Die ArrayIndex-Funktion vergleicht schrittweise alle Array-Elemente aus Values mit Elem, wobei für Objekte der Is-Operator verwendet werden muss:
Function ArrayIndex( _ ByRef Elem As Variant, _ ByRef Values As Variant _ ) As Long If IsObject(Elem) Then 'Objekte vergleichen: For ArrayIndex = LBound(Values) To UBound(Values) If IsObject(Values(ArrayIndex)) _ Then If Elem Is Values(ArrayIndex) _ Then Exit Function Next ArrayIndex Else '"Normale" Werte vergleichen: For ArrayIndex = LBound(Values) To UBound(Values) If Not IsObject(Values(ArrayIndex)) _ Then If Elem = Values(ArrayIndex) _ Then Exit Function Next ArrayIndex End If 'Kein Treffer: ArrayIndex = LBound(Values) - 1 End Function
Die ListIndex-Funktion beruht auf ArrayIndex. Werden keine Parameter übergeben, so kann es keinen Treffer geben. Ansonsten wird unterschieden, ob ein komplettes Array oder eine Parameter-Liste übergeben wurde:
Function ListIndex( _ ByRef Elem As Variant, _ ParamArray Values() As Variant _ ) As Long If UBound(Values) < 0 Then 'Keine Liste, also kein Treffer: ListIndex = -1 Else If IsArray(Values(0)) Then 'Array durchsuchen: ListIndex = ArrayIndex(Elem, Values(0)) Else 'Parameter-Liste durchsuchen: ListIndex = ArrayIndex(Elem, CVar(Values)) End If End If End Function
© Jost Schwider, 21.04.2001-21.04.2001 - http://vb-tec.de/arrindex.htm