Überprüfen Sie, ob eine Zeichenfolge eine andere Zeichenfolge enthält

232

Ich möchte herausfinden, ob eine Zeichenfolge ein "," (Komma) enthält. Haben wir eine andere Option als das Lesen von Zeichen für Zeichen?

krishna
quelle
14
Funktioniert INSTRfür Sie?
Stephen Quan

Antworten:

384

Verwenden Sie die Instr- Funktion

Dim pos As Integer

pos = InStr("find the comma, in the string", ",")

wird 15 in pos zurückgeben

Wenn nicht gefunden, wird 0 zurückgegeben

Wenn Sie das Komma mit einer Excel-Formel suchen müssen, können Sie die =FIND(",";A1)Funktion verwenden.

Beachten Sie, dass Sie, wenn Sie Instrdie Position eines Strings ermitteln möchten, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, den dritten Parameter von Instr verwenden und ihm die vbTextCompareKonstante geben (oder nur 1 für eingefleischte Zeichenfolgen).

Dim posOf_A As Integer

posOf_A = InStr(1, "find the comma, in the string", "A", vbTextCompare)

gibt Ihnen einen Wert von 14.

Beachten Sie, dass Sie in diesem Fall die Startposition angeben müssen, wie in der von mir verknüpften Spezifikation angegeben: Das Startargument ist erforderlich, wenn compare angegeben ist.

rene
quelle
4
Was aber, wenn sich die gefundene Zeichenfolge an Position 0 befindet? Wie unterscheidet man zwischen "gefunden auf Index 0" und "nicht gefunden (0)"?
gEdringer
10
@gEdringer. Wenn die zu findende Zeichenfolge am Anfang ist, gibt sie 1.
rene
69

Sie können auch das spezielle Wort verwenden like:

Public Sub Search()
  If "My Big String with, in the middle" Like "*,*" Then
    Debug.Print ("Found ','")
  End If
End Sub
Makah
quelle
3
Link zum Musterformat msdn.microsoft.com/en-us/library/…
Matthew Lock
23

Es gibt auch den InStrRev Funktion, die das Gleiche tut, aber vom Ende des Textes bis zum Anfang mit der Suche beginnt.

Per @ renes Antwort ...

Dim pos As Integer
pos = InStrRev("find the comma, in the string", ",")

... würde immer noch 15 zu pos zurückgeben, aber wenn die Zeichenfolge mehr als eine der Suchzeichenfolgen enthält, wie das Wort "the", dann:

Dim pos As Integer
pos = InStrRev("find the comma, in the string", "the")

... würde 20 statt 6 auf pos zurückgeben.

LimaNightHawk
quelle
17

Aufbauend auf Renes Antwort könnten Sie auch eine Funktion schreiben, die entweder TRUE zurückgibt, wenn der Teilstring vorhanden ist, oder FALSE, wenn dies nicht der Fall ist:

Public Function Contains(strBaseString As String, strSearchTerm As String) As Boolean
'Purpose: Returns TRUE if one string exists within another
On Error GoTo ErrorMessage
    Contains = InStr(strBaseString, strSearchTerm)
Exit Function
ErrorMessage:
MsgBox "The database has generated an error. Please contact the database administrator, quoting the following error message: '" & Err.Description & "'", vbCritical, "Database Error"
End
End Function
Unheimlicher Bart
quelle
3
Was für einen Datenbankfehler erwarten wir in dieser Funktion? Die Fehlerbehebung und die Fehlermeldung scheinen völlig sinnlos zu sein.
Roobie Nuby
11
@RoobieNuby Das ist nur meine Standardfehlerbehandlung. Ich habe es in alle meine Funktionen integriert, denn wenn etwas schief geht, möchte ich, dass die Mitarbeiter mich anrufen und nicht versuchen, es selbst zu beheben.
Unheimlicher Bart