Makrothek
MS AccessMS ExcelMS WordMS Powerpoint betrifft alle

Problembeschreibung:

Wer kennt es nicht: Man möchte innerhalb eines Programmcodes wissen, ob ein bestimmter Wert in einem Array existiert und wenn ja auch noch gleich welchen Index dieser Wert im Array besitzt. Leider bietet VBA solch eine elementare Funktion nicht an.

Lösungsidee

Andere Programmiersprachen wie z. B. PHP machen es vor. Dort gibt es eine Funktion In_Array(), die genau diesen Job erledigt. Also liegt es nahe, uns auch solch eine Funktion in VBA zu generieren.

Da in VBA - im Gegensatz zu anderen Programmiersprachen - der Index im Array nur eine Zahl größer gleich 0 (Null) sein kann, kann unsere Funktion auch gleich den Index zurückgeben, falls ein Element im Array existiert, da alle Rückgabewerte kleiner Null als Index nicht vorkommen können und deshalb auf Nichtexistieren des Wertes hindeuten.

Programmcode


Function In_Array(ByVal Suchwert As Variant, ByRef Kontainer As Variant) As Long
  'gibt den Index des Felds in einem Array zurück, wenn der Suchwert im Array vorhanden ist

  Dim Wert As Variant
  Dim Index As Long

  In_Array = -1

  If Len("" & Suchwert) > 0 Then
    Index = 0
    For Each Wert In Kontainer
      'Wertvergleich entsprechend Typ
      If StrComp("" & Suchwert, "" & Wert, vbTextCompare) = 0 Then
        'Wert vorhanden -> Index zurückgeben
        In_Array = Index
        Exit For
      End If
      Index = Index + 1
    Next Wert
  End If
End Function