Verifique se uma célula contém uma substring


229

Existe uma função interna para verificar se uma célula contém um determinado caractere / substring?

Isso significaria que você pode aplicar funções textuais como Left/ Right/ Midde forma condicional sem gerar erros quando os caracteres delimitadores estiverem ausentes.

Respostas:


374

Tente usar isto:

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

Isso retornará TRUEse a célula A3contiver Some Text.


7
Destreza! Obrigado gwin003 :) Ainda estou um pouco surpreso por não haver uma função mais intuitiva para isso.
Geotheory # /

18
Sim, eu concordo, seria bom se houvesse uma CONTAINS("Text", cell)função.
precisa saber é o seguinte

20
pode valer a pena notar que esta i maiúsculas e minúsculas, e se você deseja corresponder caso, você deve usar FIND()no lugar deSEARCH()
Código Jockey

7
Ocorreu um erro ao ,invés de ;. Depois de alterar a fórmula fornecida =ISNUMBER(SEARCH("Some Text"; A3)), funcionou. Obrigado!
Renatov 22/04

6
@renatov que realmente depende da localidade do seu sistema operacional; especificamente, o caractere usado para "separador de lista".
pepoluan

22

A fórmula a seguir determina se o texto "CHECK" aparece na célula C10. Caso contrário, o resultado está em branco. Se isso acontecer, o resultado é o trabalho "CHECK".

=IF(ISERROR(FIND("CHECK",C10,1)),"","CHECK")

Você pode usar 4 espaços ou tabulação no início da linha para destacar o bloco de código.
NiematojakTomasz

@Steve, OBRIGADO;)
Dimitri

12

Essa fórmula me parece mais intuitiva:

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

isso retornará TRUE se "SomeText" estiver contido em A1.

As fórmulas IsNumber / Search e IsError / Find mencionadas nas outras respostas certamente funcionam, mas sempre me pego precisando procurar a ajuda ou fazer experiências no Excel com muita frequência com essas.


12

Para aqueles que gostariam de fazer isso usando uma única função dentro da instrução IF, eu uso

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

para ver se o substring TEXT está na célula A1

[NOTA: O TEXTO precisa ter asteriscos em torno dele]


Ele funciona, mas o uso da fórmula COUNTIF quando os dados enormes, faz arquivo não responder, o tamanho do arquivo mesmo se torna grande
Gaurravs

8

Confira a FIND()função no Excel.

Sintaxe:

FIND( substring, string, [start_position])

Retorna #VALUE!se não encontrar a substring.


Sim aninhado ISNUMBERtambém funciona, apenas para correspondências que diferenciam maiúsculas de minúsculas.
Geotheory

1

Eu gosto da resposta Rink.Attendant.6. Na verdade, eu quero verificar várias seqüências de caracteres e fiz desta maneira:

Primeiro a situação: nomes que podem ser construtores de casas ou nomes de comunidades e eu preciso agrupar os construtores como um grupo. Para fazer isso, estou procurando a palavra "construtor" ou "construção" etc. etc.

=IF(OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*builder*")),"Builder","Community")

Bem-vindo ao SO. Você deve ler o que é uma boa resposta .
geotheory

Eu não entendo o que isso deve fazer .. ele verifica o construtor duas vezes quando, presumivelmente, uma vez seria suficiente. Se encontrar o construtor, ele retornará o construtor, caso contrário, retornará a comunidade. A palavra construção não aparece em lugar nenhum. Talvez algo parecido =OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*construction*"))?
fantabolous

COUNTIFS:COUNTIFS(A1,"*builder*",A1,"*construction*")
vstepaniuk

1

É uma pergunta antiga, mas acho que ainda é válida.

Como não há função CONTAINS, por que não declará-la no VBA? O código abaixo usa a função Instr VBA, que procura uma substring em uma string. Retorna 0 quando a sequência não é encontrada.

Public Function CONTAINS(TextString As String, SubString As String) As Integer
    CONTAINS = InStr(1, TextString, SubString)
End Function

Boa maneira de melhorar a eficiência pessoal, mas com o custo de reprodutibilidade, eu diria :)
geotheory 17/06

0

Esta é uma pergunta antiga, mas uma solução para aqueles que usam o Excel 2016 ou mais recente é que você pode remover a necessidade de estruturas aninhadas se usando a nova IFS( condition1, return1 [,condition2, return2] ...)condicional.

Eu o formatei para tornar visualmente mais claro como usá-lo para o caso desta pergunta:

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

Como SEARCHretorna um erro se uma string não for encontrada, envolvi-a com um ISERROR(...)=FALSEpara verificar a verdade e, em seguida, retorne o valor desejado. Seria ótimo se SEARCHretornado 0 em vez de um erro de legibilidade, mas é assim que infelizmente funciona.

Outra nota de importância é que IFSretornará a correspondência que encontrar primeiro e, portanto, a ordem é importante. Por exemplo, se minhas seqüências de caracteres fossem Surf, Surfing, Surfsas String1,String2,String3mencionadas acima e a sequência de células, Surfingela corresponderia no primeiro termo, em vez do segundo por causa da substring Surf. Assim, os denominadores comuns precisam ser os últimos da lista. Meu IFSprecisaria ser ordenado Surfing, Surfs, Surfpara funcionar corretamente (trocar Surfinge Surfstambém funcionaria neste exemplo simples), mas Surfprecisaria ser o último.


a maioria desejará a capacidade if / else, ou seja, um valor padrão. A adição dessa citação pode ampliar o apelo da sua resposta: "Não há como definir um padrão se todos os testes retornarem FALSE (ou seja, um valor se falso). Em vez disso, digite TRUE para o último teste e, em seguida, um valor para retornar como um valor padrão se FALSO "
whitneyland 18/02/19

-3

Aqui está a fórmula que estou usando

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


Isso verifica se "." está incluído em A1 e, se estiver, retorna ... o número de caracteres restantes em A1, começando com ".". Não tenho certeza se esse cálculo adicional é relevante aqui.
Grade 'Eh' Bacon

Pelo menos useIFERROR(LEN(A1) - FIND(".", A1), 0)
Nigel Touch
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.