VBA InStr – Como Trabalhar com essa Função? [PASSO A PASSO]

Se você usa o VBA no seu dia a dia, talvez já tenha ouvido falar na função VBA InStr, mais uma versatilidade disponível nesse programa para automatizar as planilhas do trabalho.

Essa é uma função bastante simples de extrair texto em VBA, mas que poucas pessoas conhecem ou sabem aplicar, na prática.

Nesse conteúdo, vamos mostrar exemplos da função e explicar como ela pode ser usada.

Vale a pena conhecer e se aprofundar no assunto, especialmente se faz parte da sua rotina a análise de dados e estatísticas em grande volume de informação. Confira a seguir!

Quer aprender a trabalhar com o VBA do zero? Então conheça o Curso Completo Online e com certificação de VBA da Hashtag Treinamentos!

A função InStr do VBA retorna a posição numérica em que uma substring aparece dentro de outra string — InStr(“Brasil”, “a”) devolve 3, por exemplo. Se o texto não for encontrado, o retorno é 0. A sintaxe é InStr([início], texto_base, texto_procurado, [comparação]), e ela é a base para localizar e extrair textos nas macros do Excel.

O Que É a Função VBA InStr?

O VBA InStr é uma funcionalidade usada para descobrir a posição de uma determinada substring em uma string depois de se determinar o método de comparação para a função. 

Mas o que isso significa, você pode estar se perguntando.

De forma resumida, dentro da linguagem de programação, considera-se uma string toda sequência de caracteres usados para formar frases e palavras. 

Simplificando, uma string representa todo texto de um programa.

Existem quatro métodos principais de comparação para esse tipo de função, sendo a InStr uma função de string.

Contudo, a saída retornada pela função é numérica, sendo assim a saída se dá através de uma variável inteira.

Essa função normalmente está relacionada à ação de extrair texto ou localizar a posição de um texto de uma planilha complexa de dados.

Por exemplo, você pode aplicar a função InStr no seu Excel para extrair uma substring de uma frase ou alterar até mesmo o design de fonte de uma string, como deixar o texto em negrito ou itálico.

Como Usar a Função VBA InStr?

como-usar-a-funcao-vba-instr

Existem diversas possibilidades de como utilizar essa função, mas para começar a usar a função VBA InStr é necessário abrir um novo projeto em Excel com o uso do VBA.

Afinal, a InStr é uma função interna da função String (texto) utilizada no Excel.

Como função VBA, ela pode ser aplicada no código de macro que é inserido por meio do editor do Microsoft Visual Basic.

A partir da definição dos métodos, a função fará uma pesquisa com distinção entre letras maiúsculas e minúsculas para localizar a posição da informação buscada ou para realizar a ação solicitada.

Essa função funciona em todas as versões do Excel em uso, do Microsoft 365 e Excel 2024 às edições anteriores, como Excel 2019, Excel 2016, Excel 2013, Excel 2010 e mais antigas.

Exemplos Práticos da Função VBA InStr

vba-instr-exemplos-praticos

Antes de mostrar os exemplos aplicados na prática, é importante saber como a função VBA InStr pode ser usada.

De modo geral, são 4 métodos usados:

  • String 1: Representa a string real fornecida na função, isto é, o texto usado para encontrar a substring. 
  • String 2: Equivale ao que se está pesquisando na função. Por exemplo, se a String 1 é a palavra Brasil e o que está buscando é a letra “a”, a letra a representa a String 2.
  • [Compare]: Representa a comparação ou localização de algo mais específico na String, se dividindo entre vbBinaryCompare, vbTextCompare e vbDatabaseCompare.
  • vbBinaryCompare: Realiza a pesquisa com distinção de maiúsculas e minúsculas, podendo retornar como 0. Por exemplo, na palavra Amapá, o resultado pela busca de “A” é igual a 1.
  • vbTextCompare: Código que não distingue maiúsculas e minúsculas. Na String Cascavel, por exemplo, a procura por “C” retornaria como 2, assim como a busca por “c”. Na lógica, A = a, B = b etc.
  • vbDatabaseCompare: Usado para comparar as informações do banco de dados.

Exemplo 1

Na palavra Brasil, para encontrar a posição do caractere a use o código VBA Instr a seguir:

  • Sub Instr_Example1 ()
  • Dim i As Variant
  • i = InStr (“Brasil”, “a”)
  • MsgBox i
  • End Sub

Na sequência, execute o código acima apertando a tecla F5 ou manualmente. O resultado numérico declarado será: 3

Exemplo 2

Na palavra Argentina, para encontrar a posição do a na segunda posição deve-se seguir o código:

  • Sub Instr_Example2 ()
  • Dim i As Variant
  • i = InStr (2, “Argentina”, “a”)
  • MsgBox i
  • End Sub

Execute o código apertando F5. Como nesse exemplo, a contagem começa a partir da posição 2, o primeiro a é ignorado na contagem. Por isso, o resultado na função deve aparecer como posição 9.

Exemplo 3

Nesse outro exemplo, é possível perceber como a VBA Instr pode ser usada para localizar nos textos com distinção de maiúscula com o código vbBinaryCompare. Por exemplo, na palavra Música, para localizar a letra I:

  • Sub Instr_Example3 () Dim i As Variant 
  • i = InStr (1, “Música”, “I”, vbBinaryCompare) 
  • MsgBox i End Sub

Apertando o F5 para executar o código, você terá como resultado a posição 0, pois a função não terá encontrada uma letra maiúscula correspondente.

Exemplo 4

Caso prefira esse conteúdo do Exemplo 4 no formato de vídeo-aula, assista ao vídeo abaixo!

Ícone VBAVBA Impressionador

Como automatizar praticamente qualquer tarefa repetitiva que você faça dentro do Excel. Aprenda a criar integrações do Excel com o PowerPoint, Word, Outlook e muito mais. Aprenda a criar automações para resolver tudo com apenas um clique em um botão. Tudo isso com uma única linguagem que junta todos esses programas.

Começar agoraSeta para a direita
Fundo VBATelas VBA

O que você aprende neste vídeo

Resposta rápida: O InStr devolve a posição de um trecho dentro de um texto, e é ele que destrava os outros: Left pega da esquerda, Right da direita, Mid pega do meio e Len dá o total de caracteres. Achando as posições dos separadores, os três primeiros extraem cada pedaço. Uma estrutura de repetição substitui o número fixo da linha por uma variável.

Neste vídeo (17 min):

  • 0:40 - O exemplo: um código único com nome, sobrenome e curso separados por hífen.
  • 1:40 - Abrir o editor do VBA e inserir um módulo para escrever a macro.
  • 2:30 - Identificar o padrão do texto antes de escrever qualquer linha de código.
  • 3:00 - Guardar o conteúdo da célula dentro de uma variável.
  • 3:20 - Usar InStr para achar a posição do primeiro separador.
  • 4:20 - Rodar passo a passo com F8 e acompanhar o valor de cada variável.
  • 5:00 - Achar o segundo separador com o argumento opcional de início da busca.
  • 6:00 - Extrair o nome com Left, que conta a partir da esquerda.
  • 7:00 - Como calcular o comprimento a partir da posição do separador.
  • 7:40 - Extrair o curso com Right, que exige uma conta diferente.
  • 8:00 - Usar Len para saber o total de caracteres do texto.
  • 9:30 - Extrair o sobrenome com Mid, que pede o começo e o comprimento.
  • 11:00 - Ajustar a conta por causa dos espaços em volta dos separadores.
  • 13:00 - A estrutura de repetição, que troca o número fixo da linha por uma variável.

Trechos do vídeo:

  • O terceiro argumento do InStr define de onde a busca começa. Sem ele, procurar o segundo separador devolve a posição do primeiro de novo.
  • Sem a estrutura de repetição, cada linha da planilha exige trocar o número à mão no código. Com ela, o mesmo bloco roda uma vez para cada linha da faixa.

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Veja abaixo a disposição de 6 exemplos que temos:

Função para manipulação de textos no vba
Função para manipulação de textos no vba

Necessitamos, por meio de um código e artifícios via VBA separar em 3 colunas diferentes as 3 informações: nome, sobrenome e curso.

Com o código abaixo, isso será conseguido. Acompanhe!

VBA
<strong>Sub extrairCodigo()</strong><br><br><strong>    For linha = 2 To 6</strong><br><br><strong>        texto = Cells(linha, 1).Value</strong><br><strong>   </strong><br><strong>        priTraco = InStr(texto, "-")</strong><br><br><strong>        segTraco = InStr(priTraco + 1, texto, "-")</strong><br><br><strong>        nome = Left(texto, priTraco - 2)</strong><br><strong>        sobrenome = Mid(texto, priTraco + 2, segTraco - priTraco - 3)</strong><br><strong>        curso = Right(texto, Len(texto) - segTraco - 1)</strong><strong>       </strong><br><br><strong>        Cells(linha, 2).Value = nome</strong><br><strong>        Cells(linha, 3).Value = sobrenome</strong><br><strong>        Cells(linha, 4).Value = curso</strong><br><strong>    Next</strong><br><br><strong>End Sub</strong>

Explicação do código acima:

  • Utilizando uma estrutura de repetição do tipo For, fazer as ações repetidas, da linha 2 até a linha 6:
    • Armazenar na variável “texto” o valor da célula na linha representada pela variável “linha”, na coluna A
    • Armazenar na variável “priTraco” o número resultante da função InStr, procurando a palavra no texto representado pela variável “texto” o pedaço de texto “-“ (hífen)
    • Armazenar na variável “segTraco” o número resultante da função InStr, procurando na posição representada pela posição resultante da soma de “priTraco” + 1 (posição seguinte ao primeiro traço daquele texto inteiro), a palavra no texto representado pela variável “texto” o pedaço de texto “-“ (hífen)
    • Armazenar na variável “nome” o resultante da função Left, que vai pegar uma cadeia de texto a partir da esquerda, que é o que está no texto “texto” até a posição representada por “priTraco” -2. Aqui o resultado esperado é o que tem no começo da palavra, até a última letra, antes do 1º traço
    • Armazenar na variável “sobrenome” o resultante da função Mid, que vai pegar uma cadeia de texto a partir de uma determinada posição, que é o que está no texto “texto”, considerando a partir da posição representada por “priTraco” + 2, até a posição representada por “segTraco” – “priTraco” – 3. Aqui o resultado esperado é o que tem no começo da 2ª palavra, até a última letra da 2ª palavra, antes do 2º traço
    • Armazenar na variável “curso” o resultante da função Right, que vai pegar uma cadeia de texto a partir da direita, que é o que está no texto “texto”, considerando até a posição representada por pela quantidade de caracteres da variável “texto” – “segTraco” – 1. Aqui o resultado esperado é o que tem no começo da 3ª palavra, até a última letra da 3ª palavra, depois do 2º traço
    • Armazenar no valor da célula na linha representada pela variável “linha”, na coluna B, o que estiver na variável “nome”
    • Armazenar no valor da célula na linha representada pela variável “linha”, na coluna C, o que estiver na variável “sobrenome”
    • Armazenar no valor da célula na linha representada pela variável “linha”, na coluna D, o que estiver na variável “curso”

Destrinchando um dos textos para facilitar o entendimento:

Função de texto no VBA
Função de texto no VBA

O esperado, se rodássemos o código, para essa linha específica, seria:

vba instr

Rodando o código, teremos o seguinte resultado:

vba instr

Veja que agora temos os nomes, sobrenomes e cursos separados, em colunas diferentes, da forma como queríamos no começo da aula.

Aprenda a trabalhar com VBA do zero agora. Conheça o Curso Completo Online e com certificação de VBA da Hashtag Treinamentos!

Perguntas frequentes

1. O que a função InStr retorna quando não encontra o texto?

Quando a substring não existe dentro do texto pesquisado, a InStr retorna 0. Encontrando, ela devolve a posição do primeiro caractere da ocorrência, contando a partir de 1 — em InStr(“Brasil”, “a”), o resultado é 3. Esse retorno numérico permite usar a função dentro de condições e cálculos nas macros.

2. Qual a diferença entre vbBinaryCompare e vbTextCompare no VBA InStr?

O vbBinaryCompare diferencia maiúsculas de minúsculas: buscar a letra I maiúscula em Música retorna 0, porque só existe o i minúsculo. Já o vbTextCompare ignora essa distinção e trata A e a como equivalentes. Há ainda o vbDatabaseCompare, usado para comparações com informações de banco de dados no Access.

3. Como separar nome, sobrenome e curso de um texto com InStr?

Localize os delimitadores com a InStr — a posição do primeiro hífen e, começando a busca depois dele, a do segundo — e recorte com Left, Mid e Right. O Left pega o trecho antes do primeiro traço, o Mid extrai o miolo e o Right captura o final, preenchendo três colunas em um loop For.

4. Existe uma versão da InStr que busca de trás para frente?

Sim, a InStrRev: ela procura a substring começando pelo final do texto e devolve a posição da última ocorrência. É útil, por exemplo, para achar a última barra de um caminho de arquivo e isolar só o nome dele. A contagem da posição, porém, continua sendo feita do início da string.

Conclusão

Reunimos aqui as principais dicas e uma breve definição sobre o que é a função VBA InStr.

Nos exemplos, você pode observar que existem diversas formas de aplicar esse recurso no seu trabalho para buscar a posição de uma determinada informação dentro do texto.

A ideia é que essa função e todas as outras do VBA possam ajudar a tornar a sua rotina ainda mais simples e prática.

Quer saber mais sobre esse universo de VBA e Excel avançado? Não perca tempo. Existem cursos, como os da #Treinamentos, para todos os níveis. 

Para aprender sobre o VBA do zero, você pode ler nosso artigo que fala sobre VBA e começar agora a aprender mais sobre o assunto.

Explore mais uma possibilidade para tornar seu currículo profissional ainda mais atrativo e para se destacar no mercado de trabalho.

Hashtag Treinamentos

Para acessar outras publicações de VBA, clique aqui!


Quer aprender mais sobre VBA com um minicurso básico gratuito?