Testen, ob eine Zeichenfolge mit einer Zeichenfolge beginnt?

77

Was ist in VBA der einfachste Weg, um zu testen, ob ein String mit einem Teilstring beginnt? Java hat startsWith. Gibt es ein VBA-Äquivalent?

armstrhb
quelle
Kennen Sie die Länge des Teilstrings, den Sie finden möchten?
Blackhawk

Antworten:

140

Es gibt verschiedene Möglichkeiten, dies zu tun:

InStr

Mit der integrierten InStrFunktion können Sie testen, ob ein String einen Teilstring enthält. InStrgibt entweder den Index der ersten Übereinstimmung oder 0 zurück. Sie können also testen, ob ein String mit einem Teilstring beginnt, indem Sie Folgendes tun:

If InStr(1, "Hello World", "Hello W") = 1 Then
    MsgBox "Yep, this string begins with Hello W!"
End If

Wenn InStrzurückgegeben 1wird, beginnt der String ("Hello World") mit dem Teilstring ("Hello W").

Mögen

Sie können den likeVergleichsoperator auch zusammen mit einigen grundlegenden Mustervergleichen verwenden:

If "Hello World" Like "Hello W*" Then
    MsgBox "Yep, this string begins with Hello W!"
End If

In diesem Fall verwenden wir ein Sternchen (*), um zu testen, ob der String mit unserer Teilzeichenfolge beginnt.

armstrhb
quelle
1
InStrerledigt den Job, aber es scheint nicht Likein VBScript zu sein (siehe stackoverflow.com/a/30301238/61508 )
immitev
40

Gemessen an der Deklaration und Beschreibung der startsWithJava-Funktion wäre der "einfachste Weg", sie in VBA zu implementieren, entweder Left:

Public Function startsWith(str As String, prefix As String) As Boolean
    startsWith = Left(str, Len(prefix)) = prefix
End Function

Oder, wenn Sie den Offset-Parameter verfügbar haben möchten, mit Mid:

Public Function startsWith(str As String, prefix As String, Optional toffset As Integer = 0) As Boolean
    startsWith = Mid(str, toffset + 1, Len(prefix)) = prefix
End Function
Schwarzer Falke
quelle
4
Dies hat auch den Vorteil, dass es schneller ausgeführt werden kann als die Lösung von armstrhb (seine Lösung ist jedoch einfacher zu lesen und zu codieren).
Dan
... und um zu überprüfen, ob es mit dem Teilstring endet, verwenden Sie Right()stattdessen einfach : Right(str, Len(prefix)) = prefix:-)
Stephen R
1
Sie werden es auch ein teeeeeny Bit unter Verwendung des Mid $ (...) Funktion oder Left $ (...) Funktionen (die das String - Variable erlauben gebenen gerade werden , ohne dass in einer Variante gewickelt wird) beschleunigen
Daniel Scott