Compruebe si una celda contiene una subcadena

229

¿Existe una función incorporada para verificar si una celda contiene un determinado carácter / subcadena?

Significaría que puede aplicar funciones de texto como Left/ Right/ Midde manera condicional sin arrojar errores cuando los caracteres de delimitación están ausentes.

geoteoria
fuente

Respuestas:

374

Intenta usar esto:

=ISNUMBER(SEARCH("Some Text", A3))

Esto regresará TRUEsi la celda A3contiene Some Text.

gwin003
fuente
77
¡Astucia! Gracias gwin003 :) Todavía estoy un poco sorprendido de que no haya una función más intuitiva para esto.
geotheory
18
Sí, estoy de acuerdo, sería bueno si hubiera una CONTAINS("Text", cell)función.
gwin003
20
podría valer la pena tener en cuenta que esto no distingue entre mayúsculas y minúsculas, y si desea hacer coincidir mayúsculas y minúsculas, debe usar FIND()en lugar deSEARCH()
Code Jockey
77
Recibí un error al usar en ,lugar de ;. Después de cambiar la fórmula proporcionada a =ISNUMBER(SEARCH("Some Text"; A3))funcionó. ¡Gracias!
renatov
66
@renatov que en realidad depende de la configuración regional de su sistema operativo; específicamente, el carácter usado para "separador de lista".
pepoluan
22

La siguiente fórmula determina si el texto "VERIFICAR" aparece en la celda C10. Si no lo hace, el resultado está en blanco. Si lo hace, el resultado es el trabajo "COMPROBAR".

=IF(ISERROR(FIND("CHECK",C10,1)),"","CHECK")
Steve
fuente
Puede usar 4 espacios o tabulaciones al comienzo de la línea para resaltar el bloque de código.
NiematojakTomasz
@ Steve, GRACIAS;)
Dimitri
12

Esta fórmula me parece más intuitiva:

=SUBSTITUTE(A1,"SomeText","") <> A1

esto devuelve VERDADERO si "SomeText" está contenido en A1.

Las fórmulas IsNumber / Search e IsError / Find mencionadas en las otras respuestas ciertamente funcionan, pero siempre encuentro que necesito mirar la ayuda o experimentar en Excel con demasiada frecuencia con esas.

Warren Stevens
fuente
12

Para aquellos que deseen hacer esto usando una sola función dentro de la instrucción IF, uso

=IF(COUNTIF(A1,"*TEXT*"),TrueValue,FalseValue)

para ver si el TEXTO de la subcadena está en la celda A1

[NOTA: TEXT necesita tener asteriscos a su alrededor]

dsm
fuente
Funciona, pero el uso de la fórmula COUNTIF cuando los datos son enormes, hace que el archivo no responda, incluso el tamaño del archivo se vuelve enorme
Gaurravs
8

Echa un vistazo a la FIND()función en Excel.

Sintaxis:

FIND( substring, string, [start_position])

Devuelve #VALUE!si no encuentra la subcadena.

paras_doshi
fuente
Sí anidado en ISNUMBEResto también funciona, solo para coincidencias entre mayúsculas y minúsculas.
geoteoría
1

Me gusta Rink.Attendant.6 respuesta. De hecho, quiero verificar si hay varias cadenas y lo hice de esta manera:

Primero, la situación: nombres que pueden ser constructores de casas o nombres de comunidades y necesito agrupar a los constructores como un solo grupo. Para hacer esto, estoy buscando la palabra "constructor" o "construcción", etc. Entonces -

=IF(OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*builder*")),"Builder","Community")
Donaciones
fuente
Bienvenido a SO. Debe leer sobre lo que hace una buena respuesta .
geotheory
No entiendo lo que se supone que debe hacer ... comprueba el generador dos veces cuando presumiblemente una vez sería suficiente. Si encuentra el generador, devuelve el generador, de lo contrario, devuelve la comunidad. La palabra construcción no aparece en ningún lado. ¿Quizás algo así =OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*construction*"))?
fantástico
Hay COUNTIFS:COUNTIFS(A1,"*builder*",A1,"*construction*")
vstepaniuk
1

Es una vieja pregunta, pero creo que sigue siendo válida.

Como no hay una función CONTAINS, ¿por qué no declararla en VBA? El siguiente código utiliza la función VBA Instr, que busca una subcadena en una cadena. Devuelve 0 cuando no se encuentra la cadena.

Public Function CONTAINS(TextString As String, SubString As String) As Integer
    CONTAINS = InStr(1, TextString, SubString)
End Function
Bjorn
fuente
Buena manera de mejorar la eficiencia personal, pero a costa de la reproducibilidad, diría :)
geotheory
0

Esta es una pregunta antigua, pero una solución para aquellos que usan Excel 2016 o más reciente es que puede eliminar la necesidad de estructuras anidadas si usa el nuevo IFS( condition1, return1 [,condition2, return2] ...)condicional.

Lo he formateado para que sea visualmente más claro sobre cómo usarlo para el caso de esta pregunta:

=IFS(
ISERROR(SEARCH("String1",A1))=FALSE,"Something1",
ISERROR(SEARCH("String2",A1))=FALSE,"Something2",
ISERROR(SEARCH("String3",A1))=FALSE,"Something3"
)

Como SEARCHdevuelve un error si no se encuentra una cadena, la envolví con un ISERROR(...)=FALSEpara verificar la verdad y luego devolver el valor deseado. Sería genial si SEARCHdevuelve 0 en lugar de un error de legibilidad, pero desafortunadamente así es como funciona.

Otra nota importante es que IFSdevolverá la coincidencia que encuentre primero y, por lo tanto, ordenar es importante. Por ejemplo, si mis cadenas eran Surf, Surfing, Surfscomo las String1,String2,String3anteriores y la cadena de mis celdas Surfingcoincidiría en el primer término en lugar del segundo debido a que la subcadena es Surf. Por lo tanto, los denominadores comunes deben ser los últimos en la lista. Mi IFStendría que ser ordenado Surfing, Surfs, Surfpara que funcione correctamente (el intercambio Surfingy Surfstambién funcionaría en este sencillo ejemplo), pero Surftendría que ser el último.

Shawn
fuente
la mayoría querrá la habilidad if / else, en otras palabras, un valor predeterminado. Agregar esta cita podría ampliar el atractivo de su respuesta: "No hay forma de establecer un valor predeterminado si todas las pruebas devuelven FALSO (es decir, un valor si es falso). En su lugar, ingrese VERDADERO para la última prueba y luego un valor para devolver como valor predeterminado si es FALSO "
whitneyland
-3

Aquí está la fórmula que estoy usando

=IF( ISNUMBER(FIND(".",A1)), LEN(A1) - FIND(".",A1), 0 )

Jim D
fuente
Esto verifica si "." está incluido en A1, y si lo está, devuelve ... el número de caracteres restantes en A1, comenzando con ".". No estoy seguro si ese cálculo adicional es relevante aquí.
Grado 'Eh' Bacon
Al menos, useIFERROR(LEN(A1) - FIND(".", A1), 0)
Nigel Touch