Die 12 wichtigsten VBA-Text-Funktionen

Die Funktion InStr()

∅ 4.3 / 4 Bewertungen

Die Funktion InStr()

Auf dieser Seite

Diese Funktion ermittelt die Position eines gesuchten Textes innerhalb einer Zeichenkette.

Jetzt ist Ihnen wahrscheinlich auch schon das Hauptproblem dieser Beispiele aufgefallen: ich wusste vorher, was in der Konstante m_cstrName steht und konnte deswegen die gewünschten Zahlen als Parameter notieren.

So ist es in einem typischen Programm natürlich nicht, dann könnte ich ja gleich die gefundenen Ergebnisse hart codiert hineinschreiben. Es muss also einen Weg geben, die gesuchten Zahlenwerte per VBA-Funktion zu finden.

Wenn ich also weiß, dass die Teile des Namens durch Leerzeichen getrennt sind, kann ich mit der InStr()-Funktion deren Position finden. Genauer gesagt, die Position des ersten Leerzeichens, denn InStr() liefert immer nur genau einen Rückgabewert. Das wird langfristig jedoch kein wirkliches Problem bleiben, wie Sie noch sehen werden.

Suchen wir also zuerst einmal ein beliebig langes, erstes Wort:

Sub VornamenBesserFinden()
    Dim strVorname As String
    Dim intLeerPos As Integer
    
    intLeerPos = InStr(m_cstrName, " ")
    strVorname = Left(m_cstrName, intLeerPos)
    MsgBox "Vorname: " & strVorname
End Sub

Ändern Sie ruhig den Inhalt der Konstanten m_cstrName ganz oben im Modul mit unterschiedlich langen Vornamen. Das Beispiel funktioniert einwandfrei, wie Sie durch diese Versuche herausfinden.

Aber es hat trotzdem zwei Mängel, die noch behoben werden sollen:

  • Bei dem Namen Lorenz hat intLeerPos den Wert 7, weil dort das Leerzeichen steht. Wenn die Left()-Funktion das so weiterverarbeitet, zeigt das Ergebnis die ersten sieben Zeichen, also "Lorenz " einschließlich des Leerzeichens dahinter. Rechnen Sie intLeerPos - 1 und das Problem ist behoben.

  • Dafür verschärfen Sie so ein zweites Problem: was passiert, wenn gar kein Leerzeichen vorhanden ist, etwa bei einem Künstlernamen wie Loriot? Findet InStr() den gesuchten Text nicht, liefert es 0 als Position zurück. Ziehen Sie davon auch noch 1 ab, so muss das scheitern.

Für das zweite Problem gibt es eine erfrischend einfache Lösung, indem Sie InStr() vorgaukeln, alles sei in Ordnung. Da InStr() nämlich immer nur die Position der ersten Fundstelle liefert, können Sie an m_cstrName einfach per VBA immer ein Leerzeichen anhängen.

War vorher schon eines darin enthalten, wird jenes zuerst gefunden, weil es weiter vorne steht. Nur bei dessen Fehlen wird wenigstens das angehängte Leerzeichen ermittelt, also ist immer eines drin. Dann wird eben der gesamte Inhalt ohne Fehlermeldung als Vorname zurückgeliefert.

Jetzt ist die Prozedur wie folgt korrigiert:

Sub VornamenNochBesserFinden()
    Dim strVorname As String
    Dim intLeerPos As Integer
    
    intLeerPos = InStr(m_cstrName & " ", " ")
    strVorname = Left(m_cstrName, intLeerPos - 1)
    MsgBox "Vorname: " & strVorname
End Sub

Durch diese zusätzliche Absicherung sind Sie sicher, dass Ihr Code immer wenigstens ein erstes Wort findet.