Compruebe si una cadena contiene otra cadena


233

Quiero encontrar si una cadena contiene un "," (coma) en ella. ¿Tenemos alguna otra opción que no sea leer char-by-char?


14
¿ INSTRFunciona para ti?
Stephen Quan

Respuestas:


386

Use la función Instr

Dim pos As Integer

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

devolverá 15 en pos

Si no se encuentra, devolverá 0

Si necesita encontrar la coma con una fórmula de Excel, puede usar la =FIND(",";A1)función.

Tenga en cuenta que si desea usar Instrpara encontrar la posición de una cadena que no distingue entre mayúsculas y minúsculas, use el tercer parámetro de Instr y dele la constante vbTextCompare(o solo 1 para troqueles).

Dim posOf_A As Integer

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

le dará un valor de 14.

Tenga en cuenta que debe especificar la posición de inicio en este caso como se indica en la especificación que vinculé: el argumento de inicio es obligatorio si se especifica la comparación.


44
Pero, ¿qué pasa si la cadena encontrada está en la posición 0? ¿Cómo distingue entre "encontrado en el índice 0" y "no encontrado (0)"?
gEdringer

10
@gEdringer. Cuando la cadena que se encuentra está al principio, devuelve 1.
rene


23

También existe la función InStrRev que hace el mismo tipo de cosas, pero comienza a buscar desde el final del texto hasta el principio.

La respuesta de Per @ rene ...

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

... aún devolvería 15 a pos, pero si la cadena tiene más de una de la cadena de búsqueda, como la palabra "the", entonces:

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

... devolvería 20 a pos, en lugar de 6.


17

Sobre la base de la respuesta de Rene, también podría escribir una función que devolviera VERDADERO si la subcadena estaba presente o FALSO si no fuera así:

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

3
¿Qué tipo de error de base de datos esperamos en esta función? La captura de error y el mensaje de error parecen ser completamente inútiles.
Roobie Nuby

11
@RoobieNuby Ese es solo mi manejo de errores predeterminado. Lo puse en todas mis funciones porque si algo sale mal, quiero que el personal me llame, no intente arreglarlo por sí mismo.
Sinister Beard
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.