InStr-Funktion: Erklärung mit Code-Beispielen (Visual Basic for Application)

Innerhalb von Visual Basic for Application (VBA) stellt die InStr-Funktion eine sehr nützliche Funkion beim Arbeiten mit Strings dar. So kann man innerhalb der Microsoft Office-Anwendungen, wie Excel, Word, Access, Outlook konkrete Auswertungen und Operationen mit Texten und Zeichenfolgen vornehmen.

VBA Position eines Zeichens oder einer Zeichenfolge ermitteln

Lang ausgesprochen heißt die Funktion als “In String”. Das heißt es wird innerhalb eines vorhandenen Strings gesucht, ob ein anderes Zeichen oder auch mehrere Zeichen als Zeichenfolge vorhanden sind. Wird die gesuchte Zeichenfolge gefunden, dann wird die Position als Zahlenwert (Integer) zurückgegeben. Wird die gesuchte Zeichenfolge nicht gefunden, dann wird die Zahl “0” zurückgegeben. Dies ist eine Besonderheit zu anderen Programmiersprachen, da dort meistens mit dem Index = 0 gearbeitet wird und somit das erste Zeichen die Position “0” hätte. Bei VBA hat das erste Zeichen, aber die Positionsnummer “1”.

Syntax der InStr-Funktion

result = InStr([ startPos ], anyString, searchedString, [ vergleich])

Die Werte in den eckigen Klammern sind optionale Werte. Die können mit verwendet werden, müssen aber nicht.

  • startPos: hier kann ein Zahlenwert angegeben werden. Dieser entspricht der Position an welcher die Suche beginnen soll. Wird der Wert nicht angegeben, dann beginnt die Suche immer beim ersten Zeichen. Bei Verwendung des [vergleich]-Parameter muss dieser Wert mit angegeben werden.
  • anyString: hierbei handelt es sich um den String (Text, Zeichenfolge) der durchsucht werden soll.
  • searchedString: hierbei handelt es sich um die Zeichenfolge, die innerhalb von anyString gesucht werden soll.
  • vergleich: Hier kann man 4 (Zahlen-)Werte bzw. Konstanten übergeben, welche definieren, wie der Vergleich von Zeichenfolgen bei der Suche durchgeführt werden soll.
    vbUseCompareOption (Wert: -1): Führt einen Vergleich mit einer Vergleichsanweisung durch. Wird wenig bis kaum benötigt.
    vbBinaryCompare (Wert: 0): Es wird ein binärer Vergleich ausgeführt. Dass heißt, es wird von  jedem Zeichen der Byte-Wert genommen und die Bytes verglichen. Dadurch unterscheiden sich auch Groß- und Kleinbuchstaben (Case-Sensitive)
    vbTextCompare (Wert: 1): Hier wird nur der Text verglichen. Zwischen Groß- und Kleinschreibung wird nicht unterschieden (Case-Insensitive).
    vbDatabaseCompare (Wert: 2): Wird nur für Vergleiche innerhalb von Access-Datenbanken benötigt.
  • result: Dies ist eine numerische Variable, die den Rückgabewert der Funktion InStr zugewiesen bekommt und dann innerhalb des VBA-Programms weiter verwendet werden kann.

Code-Beispiele

Nachfolgend ein paar VBA-Code-Beispeile zur richtigen Anwendung der InStr-Funktion:

Dim anyString, searchedString As String
Dim result As Integer
anyString = "Zehn zahme Ziegen zogen zehn Zentner Zucker zum Zoo."
searchedString = "Zehn"

result = InStr(anyString, searchedString)
'Ergebnis Beispiel 1: result = 1

result = InStr(5, anyString, searchedString)
'Ergebnis Beispiel 2: result = 0, Unterscheidung Groß- und Kleinschreibung vbBinaryCompare ist Standard

result = InStr(5, anyString, searchedString, vbBinaryCompare)
'Ergebnis Beispiel 3: result = 0

result = InStr(5, anyString, searchedString, vbTextCompare)
'Ergebnis Beispiel 4: result = 25 (keine Unterscheidung Groß- und Kleinschreibung

result = InStr(1, anyString, searchedString, vbTextCompare)
'Ergebnis Beispiel 5: result = 1 (keine Unterscheidung Groß- und Kleinschreibung

Weitere Rückgabewerte

Rückgabe der Zahl “0”

Die Ziffer 0 wird zurückgegeben, wenn

  • die Länge von anyString null bzw. keine Zeichen aufweist
  • der searchedString nicht in anyString enthalten ist bzw. gefunden wurde abhängig vom Vergleichsparameter
  • Parameter startPos größer ist als die Anzahl der Zeichen von anyString.

Rückgabe NULL-Pointer

Ein NULL-Pointer wird zurückgegeben in den Fällen, wenn

  • anyString ebenfalls NULL ist, oder wenn
  • searchedString ebenfalls NULL ist

Rückgabe startPos oder Zahl “1”

Wenn searchedString eine leere Zeichenkette ist, wird die vorgegebene Startposition zurückgegeben. Ist diese nicht angegeben, wird die Position “1” zurückgegeben.

Dim anyString, searchedString As String
Dim result As Integer
anyString = "Zehn zahme Ziegen zogen zehn Zentner Zucker zum Zoo."
searchedString = ""

result = InStr(anyString, searchedString)
'Ergebnis ist result = 1

result = InStr(53, anyString, searchedString)
'Ergebnis ist result = 53

result = InStr(5, anyString, searchedString, vbTextCompare)
'Ergebnis ist result = 5

Anwendungsfälle für InStr

Daraus resultieren verschiedene Anwendungsfälle für InStr zur weiterverarbeitung von Strings:

  • Weiterverwendung in einer If-Anweisung zum Überprüfen, ob ein Zeichen oder Zeichenfolge vorhanden sind: InStr > 0
  • Zum Zerteilen eines Strings (SubString) mit den Funktionen Left, Mid, Right an der gefunden Position
Bestseller Nr. 1
Bestseller Nr. 2

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.