Acabei de notar que não há opção no Excel Find para "corresponder apenas à palavra inteira" (não estou falando de "corresponder ao conteúdo da célula inteira"), por exemplo, pesquisar por "parte" não deve corresponder a "parceiro". O MS Word tem esta opção (verifique a captura de tela do MS Word).
Existe uma solução alternativa para isso no Excel?
Responder1
Conforme apontado por Scott, minha resposta original estava errada.
Devido à infinidade de maneiras de definir o limite de uma palavra, isso será difícil de fazer com um forumla. Acho que é por isso que \b
(limite de palavra) existe em expressões regulares. Se ao menos pudéssemos usá-los na caixa de diálogo localizar/substituir do Excel.
Instale este suplemento do Excel,http://www.codedawn.com/excel-add-ins.phpclique no novoEncontre e substitua RegExbotão (ou opção de menu em 2003) e use este termo de pesquisa \bword\b
, desmarque/marque a caixa de correspondência e clique em Localizar.
É importante que os b estejam em letras minúsculas e você terá que aprender um pouco sobre expressões regulares (recomendoesse site) se você quiser pesquisar algo que envolva pontuação, mas não há problema em colocar qualquer letra/número padrão entre as \b
tags, se isso for tudo o que você deseja pesquisar.
Acho que cobri a maioria dos casos com este teste:
Responder2
Em termos de fórmula, você pode pesquisar por "Word" (sem distinção entre maiúsculas e minúsculas) com esta fórmula para obter TRUE apenas para a palavra exata, assumindo que não há pontuação
=ISNUMBER(SEARCH(" Word "," "&A1&" "))
Isso retornaria TRUE para texto como
uma palavra para o sábio ouGraxa é a palavra
e corretamente FALSO paraEspada de Dâmocles.....mas você também obteria FALSE para algo como
Minha palavra!porque o ponto de exclamação anula a correspondência
Para lidar com a pontuação, você pode usar múltiplas funções SUBSTITUTE, por exemplo, para ignorar vírgula, ponto e vírgula e ponto de exclamação, você pode usar esta versão
=ISNUMBER(SEARCH(" Word "," "&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,",",""),";",""),"!","")&" "))
Responder3
Ao inserir os parâmetros na seção “Localizar”, basta incluir um espaço antes ou depois da palavra. No meu caso, "Van" impedia que "SAVANA" mudasse, e "Man" impediria que "Mankind" mudasse.
Responder4
Eu encontrei uma solução para esse problema.
Você deve criar uma função que chamará depois de fazer sua pesquisa padrão e encontrar 1 resultado.
A função vai verificar se a palavra é inteira ou nota. Aqui está o código da função:
Ele verifica o caractere antes e depois da expressão encontrada e se NÃO for uma letra (acentuada ou não) retorna verdadeiro, caso contrário, falso.
Function WholeWord(ByVal text As String, ByVal expression As String) As Boolean
Dim aux1 As Integer: aux1 = 0
Dim aux2 As Integer: aux2 = 0
Dim condition1 As Boolean: condition1 = False
Dim condition2 As Boolean: condition2 = False
aux1 = InStr(1, text, expression, vbTextCompare)
If aux1 = 1 Then
condition1 = True
Else
If UCase(Mid(text, aux1 - 1, 1)) Like "[!A-ZÂÊÎÔÛÁÉÍÓÚÇÃÕÀÈÌÒÙÄËÏÖÜ]" Then
condition1 = True
End If
End If
aux2 = aux1 + Len(expression)
If aux2 = Len(text) + 1 Then
condition2 = True
Else
If UCase(Mid(text, aux2, 1)) Like "[!A-ZÂÊÎÔÛÁÉÍÓÚÇÃÕÀÈÌÒÙÄËÏÖÜ]" Then
condition2 = True
End If
End If
If condition1 = True And condition2 = True Then
WholeWord = True
Else
WholeWord = False
End If
End Function