Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Daten / Array / Index

Element in Array oder Parameter-Liste suchen

Einleitung

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.

Beispiel

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.

Code

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