web-dev-qa-db-fra.com

Vérifier si une chaîne contient une autre chaîne

Je veux savoir si une chaîne contient un "," (virgule). Avons-nous une autre option que de lire caractère par caractère?

216
krishna

Utilisez la fonction Instr

Dim pos As Integer

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

retournera 15 en pos

Si non trouvé, il retournera 0

Si vous avez besoin de trouver la virgule avec une formule Excel, vous pouvez utiliser la fonction =FIND(",";A1).

Notez que si vous voulez utiliser Instr pour trouver la position d'une chaîne insensible à la casse, utilisez le troisième paramètre de Instr et attribuez-lui la const vbTextCompare (ou seulement 1 pour les die-hards).

Dim posOf_A As Integer

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

vous donnera une valeur de 14.

Notez que vous devez spécifier la position de départ dans ce cas, comme indiqué dans la spécification I liée: L'argument de début est requis si la comparaison est spécifiée.

357
rene

Vous pouvez également utiliser le mot spécial like:

Public Sub Search()
  If "My Big String with, in the middle" Like "*,*" Then
    Debug.Print ("Found ','")
  End If
End Sub
61
Makah

Il y a aussi la fonction InStrRev qui fait le même type de chose, mais commence la recherche de la fin du texte au début.

La réponse de Per @ rene ...

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

... retournerait quand même 15 à pos, mais si la chaîne a plus d'une chaîne de recherche, comme le mot "le", alors:

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

... reviendrait 20 en pos, au lieu de 6.

22
LimaNightHawk

En vous appuyant sur la réponse de René, vous pouvez également écrire une fonction qui renvoie soit VRAI si la sous-chaîne est présente, soit FAUX si ce n’était pas le cas:

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
15
Sinister Beard