Função FIND no VBA: Como Usar?
Quer aprender a usar a função FIND no VBA? Então você está no lugar certo!
Quem não conhece a opção LOCALIZAR no Excel? Se você trabalha com o Excel a um certo tempo, então é provável que já tenha utilizado o recurso LOCALIZAR ou a popular tecla de atalho Ctrl + L para localizar uma palavra ou conteúdo que deseja procurar em toda a planilha bem como em toda a pasta de trabalho.
Da mesma forma, no VBA temos uma função chamada FIND que pode nos ajudar a encontrar o valor que estamos procurando.
Acompanhe os detalhes a seguir para conhecer mais sobre esta função através de exemplos práticos.
Como funciona a Função FIND no VBA?
A função FIND do Excel VBA procura um valor específico em um intervalo especificado. Ela procura a primeira ocorrência desse valor e se for encontrado, a função retorna a célula que o contém. No entanto, se uma correspondência não for encontrada, a função não retornará nada. A função FIND do VBA pode retornar uma correspondência exata ou parcial.
Por exemplo, o código abaixo procura o texto “São Paulo” no intervalo A1:A10 de “Planilha1“.
With Sheets("Planilha1").Range("A1:A10") Set Rng = .Find(What:="São Paulo")
O objetivo de usar a função FIND no VBA é localizar o valor desejado em um determinado conjunto de dados. Com um código VBA, pode-se automatizar a tarefa de encontrar valores no Excel.
Sintaxe da função FIND do VBA
A sintaxe da função FIND do VBA é declarada da seguinte forma:
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
Onde:
expression: é o objeto range, que precede a função FIND em um código VBA. O intervalo de pesquisa pode ser uma ou mais linhas, colunas ou toda a planilha. A função FIND do VBA aceita os seguintes argumentos:
- What: Este é o valor a ser pesquisado. Pode ser numérico, textual ou qualquer outro tipo de dados do Excel. Este argumento é o mesmo que a opção Localizar da janela “Localizar e substituir” do Excel.
- After: Indica a célula a partir da qual a busca será iniciada. Ele é inserido como uma única referência de célula. Se esse argumento for omitido, a pesquisa começará após a célula no canto superior esquerdo do intervalo de pesquisa especificado.
- LookIn: Este é o local (ou dados) onde o valor precisa ser pesquisado. Pode ser um comentário (xlComments), fórmula (xlFormulas) ou valor (xlValues). O valor padrão desse argumento é xlFormulas. Além disso, esse argumento é o mesmo que a opção Localizar da janela “Localizar e substituir” do Excel.
- LookAt: Este argumento decide se deve corresponder ao conteúdo da célula inteira (correspondência exata) ou corresponder a uma parte do conteúdo da célula (correspondência parcial). As constantes são xlWhole e xlPart para correspondências exatas e parciais, respectivamente. O valor padrão desse argumento é xlPart.
- SearchOrder: Este argumento sugere a ordem da pesquisa. Pode-se especificar se a pesquisa será em linhas (xlByRows) ou colunas (xlByColumns). O valor padrão desse argumento é xlByRows. Além disso, esse argumento é o mesmo que a opção Localizar da janela “Localizar e substituir” do Excel.
- SearchDirection: Indica a direção em que a pesquisa será realizada. Pode-se pesquisar para baixo ou na próxima célula com a constante xlNext. Alternativamente, pode-se pesquisar para trás (para cima) ou na célula anterior com a constante xlPrevious. O valor padrão desse argumento é xlNext.
- MatchCase: Este argumento decide se a pesquisa deverá diferenciar maiúsculas de minúsculas ou não. Se a pesquisa fizer distinção entre maiúsculas e minúsculas, esse argumento será especificado como verdadeiro (TRUE), caso contrário, será falso (FALSE). O valor padrão desse argumento é Falso.
- MatchByte: Este argumento deve ser usado se alguém tiver instalado ou selecionado o suporte ao idioma de byte duplo. Deve ser especificado como verdadeiro, se os caracteres de byte duplo forem correspondidos com caracteres de byte duplo. Ele deve ser especificado como falso, se os caracteres de byte duplo forem correspondidos com seus equivalentes de byte único.
- SearchFormat: Indica se o valor a ser pesquisado deve estar em um formato específico (como negrito ou itálico) ou não. Se o valor da pesquisa deve seguir uma técnica de formatação, esse argumento é especificado como verdadeiro, caso contrário, é falso. O valor padrão desse argumento é falso (FALSE).
Apenas o argumento What é necessário. Os demais argumentos são opcionais.
A função FIND retorna um dos seguintes resultados:
- Se for encontrada uma correspondência, a função retorna a primeira célula onde o valor está localizado.
- Se uma correspondência não for encontrada, a função não retornará nada. Isso ocorre porque o objeto da função é definido como nada.
Alternativamente, caso uma correspondência não seja encontrada, uma mensagem personalizada especificada através da função MsgBox podem ser retornada (consulte o código dos exemplos a seguir).
Observação 1: A pesquisa começa após a célula especificada no argumento After e continua até a última célula do intervalo de pesquisa. Se o valor não for encontrado até esta última célula, a pesquisa começa novamente a partir da primeira célula do intervalo de pesquisa até a célula especificada no argumento After.
Assim, a célula especificada no argumento After é pesquisada ao final do processo de pesquisa. Para obter mais detalhes sobre o uso do argumento After, consulte o segundo exemplo deste artigo.
Observação 2: Cada vez que a função FIND do VBA é usada, as configurações de LookIn, LookAt, SearchOrder e MatchByte são salvas. Portanto, se esses valores forem omitidos na próxima vez que a função for usada, o Excel usará os valores salvos anteriormente. Portanto, é recomendável declarar explicitamente os argumentos fornecidos sempre que a pesquisa for realizada usando a função FIND do VBA.
Como usar a função FIND no Excel VBA?
Para que você possa compreender o uso da função FIND no VBA, separamos a seguir alguns exemplos práticos.
Exemplo 1: Selecionar a célula com a primeira ocorrência do valor pesquisado
Neste primeiro exemplo, suponha que você tenha uma lista contendo alguns nomes conforme mostra a imagem abaixo e deseja encontrar e selecionar a célula que contém o nome Pedro.
A partir disso, siga as etapas:
1. Acesse a guia Desenvolvedor > Visual Basic. (Caso não tenha a guia Desenvolvedor habilitada em seu Excel, confira aqui o passo a passo).
2. Na tela do VBA, no menu à esquerda selecione a planilha desejada. Neste exemplo, selecionaremos a Planilha1 que é a planilha que contém a lista de nomes.
3. Após selecionar a planilha desejada, na área à direta insira o código abaixo:
Sub LocalizarNome() Range("A1:A10").Find(What:="Pedro").Select End Sub
- Observe no código acima que mencionamos o intervalo que estamos procurando (A1:A10).
- Após mencionar o intervalo coloque um ponto (.) e digite FIND.
- Nosso primeiro argumento é o que estamos procurando. Para destacar o argumento, podemos passar o argumento What:=, isso será útil para identificar a qual parâmetro estamos nos referindo.
- A parte final é depois de encontrar a palavra o que queremos fazer. Precisamos selecionar a palavra, então passe o argumento como .Select.
- Em seguida, execute este código usando a tecla F5 ou manualmente, conforme mostrado na imagem abaixo, para selecionar a primeira célula que contém o nome Pedro.
Exemplo 2: Selecionar a célula com a segunda ocorrência do valor pesquisado
Neste segundo exemplo, observe que a imagem a seguir contém alguns nomes no intervalo A1:A10. Note que o nome “Pedro” aparece duas vezes na coluna A.
Neste caso, desejamos pesquisar e selecionar a segunda ocorrência do nome “Pedro” na coluna A (ou seja, célula A7). Para isto, usaremos o seguinte código:
Sub LocalizarNome() Range("A1:A10").Find(What:="Pedro", After:=Range("A2")).Select End Sub
Observe no código acima que a pesquisa começa após a célula A2 e continua até a última célula da coluna A. Isso ocorre porque o intervalo de pesquisa foi especificado como coluna A (A1:A10).
Assim, como a busca começa na célula A3, o valor “Pedro” é encontrado na célula A7 da “Planilha2“. Portanto, a célula A7 será selecionada pela função FIND ao executar o código.
Se o nome “Pedro” não tivesse sido encontrado na célula A3 até a última célula da coluna A, a pesquisa começaria novamente na célula A1 e terminaria na célula A2 desta vez. Assim, a célula especificada no argumento “After” é pesquisada logo no final do processo de pesquisa.
Exemplo 3: Encontrar um texto especificando alguns de seus caracteres
Para localizar um texto especificando apenas uma parte dele, insira o argumento LookAt como xlPart ou omita esse argumento. Por padrão, a função FIND combina os caracteres do valor de pesquisa com a string inteira. Em seguida, ele retorna a célula que contém toda essa string.
Confira o exemplo abaixo:
Sub LocalizarNome() Range("A1:A10").Find(What:="Ped", LookAt:=xlPart).Select End Sub
Este código pesquisa os caracteres “Ped” no intervalo A1:A25 da “Planilha3”. A célula que contém o valor é retornada, o que é chamado de correspondência parcial. Portanto, independentemente de os caracteres do valor de pesquisa serem colocados no início, no meio ou no final da string, o Excel VBA retorna uma correspondência correspondente.
Observação: A constante xlPart pode ser omitida do código porque é o valor padrão da função FIND. Mas, se esse argumento for especificado, certifique-se de que não seja colocado entre aspas duplas.
Exemplo 4: Encontrar texto dentro de comentário
Você também pode utilizar a função FIND do VBA para encontrar um texto que se encontra dentro de um comentário de uma célula no Excel.
Para melhor compreensão, observe o exemplo abaixo onde temos uma planilha que contém três células com comentários (indicadas pelos triângulos vermelhos). A partir disso, queremos encontrar o texto “Comissão Paga” localizado dentro de um dos comentários. Neste caso, usaremos o seguinte código:
Sub LocalizarComentario() Range("A1:B10").Find(What:="Comissão Paga", LookIn:=xlComments).Select End Sub
Como resultado, o Excel irá selecionar apenas a célula que contém o comentário cujo texto foi especificado em nosso código.
Exemplo 5: Lidando com erros na função FIND no VBA
Caso o texto que estamos procurando não seja encontrado dentro do intervalo fornecido, então o VBA retornará um erro conforme mostrado abaixo:
Para contornar este erro, podemos utilizar um código conforme exemplo abaixo:
Sub LocalizarNome() Dim Resultado As Variant On Error Resume Next Range("A1:A10").Find(What:="Cristina").Select On Error GoTo 0 Resultado = ActiveCell.Value If Resultado = "" Then MsgBox "O valor que você está procurando não está disponível no intervalo fornecido!" Exit Sub End If End Sub
Observe no código acima que se o VBA encontrar o valor, ele mostrará o valor encontrado, ou então mostrará a mensagem como “O valor que você está procurando não está disponível no intervalo fornecido“.
Para mais dicas sobre solução de erros no VBA, consulte o artigo: Erros no VBA Excel – Tudo que você precisa saber!
Detalhes para se lembrar
- A função FIND faz parte da propriedade RANGE e você precisa usar o FIND depois de selecionar apenas o intervalo.
- Na função FIND, o primeiro argumento é obrigatório (What), além disso, todo o resto é opcional.
- Se você encontrar o valor após uma célula específica, poderá mencionar a célula no parâmetro After da sintaxe Find.
Baixe aqui a planilha contendo os exemplos apresentados neste tutorial.
Confira também as seguintes dicas de Excel:
- Offset no VBA: Como Utilizar Essa Propriedade?
- PROCV no VBA: Como Fazer?
- Função VBA InStr – Guia de Uso Passo a Passo
- Select Case no VBA – Passo a Passo com Exemplos
- Como Copiar e Colar no VBA – Passo a Passo
- Como Usar If Then Else no VBA – Passo a Passo
E então, o que achou da Função FIND no VBA? Caso tenha ficado com alguma dúvida, deixe seu comentário abaixo. Confira também mais dicas de Excel e VBA em nosso site!