VBA Tipp: Position des x-ten Vorkommens zurückgeben

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich möchte die Position des wievielten Auftretens einer Zeichenfolge innerhalb einer anderen Zeichenfolge ermitteln, und als Wert vom Typ Variant (Long) zurückgeben. Zwischen Groß- und Kleinschreibung wird dabei nicht unterschieden.

Die in Access eingebaute Funktion InStr() gibt einen Wert vom Typ Variant (Long) zurück, der die Position des ersten Auftretens einer Zeichenfolge innerhalb einer anderen Zeichenfolge angibt.

Lösung

Die Funktion wird in einem globalen Modul gespeichert.

Parameter der Funktion:

  • String1: Durchsuchter Zeichenfolgenausdruck
  • String2: Gesuchter Zeichenfolgenausdruck
  • Occurence (Optional): Position des wievielten Vorkommens von String2 innerhalb von String1
  • Compare (Optional): Vergleichsmethode, die intern von InStr beim String-Vergleich verwendet wird.
Wenn für Occurence ein Wert kleiner als 1 angegeben wird, wird ein Fehler ausgelöst.
Public Function InStrPos(String1 As Variant, _
                         String2 As Variant, _
                         Optional ByVal Occurence As Long = 1, _
                         Optional ByVal Compare As VbCompareMethod _
                                        = vbBinaryCompare) As Variant
 
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   Dim i   As Long
   Dim pos As Long
 
   If Occurence < 1 Then Err.Raise 5
 
   If IsNull(String1 + String2) Then
      InStrPos = Null
   Else
      pos = InStr(1, String1, String2, Compare)
 
      Do While pos > 0
         i = i + 1
         If i = Occurence Then Exit Do
         pos = InStr(pos + 1, String1, String2, Compare)
      Loop
   End If
 
   InStrPos = pos
 
End Function

Aufruf

   'Suche das dritte Vorkommen der Zeichenfolge 'i'
   Debug.Print InStrPos("Ich bin ein Suchtext", "i", 3) 'ergibt 10
 
   'Suche das zweite Vorkommen der Zeichenfolge 'text'
   Debug.Print InStrPos("Ich bin ein Suchtext", "text", 2) 'ergibt 0