Pular para o conteúdo principal

Função InStr do VBA: como buscar texto no Excel VBA

Aprenda a usar a função InStr do VBA para encontrar texto dentro de strings, incluindo sintaxe, exemplos, sensibilidade a maiúsculas/minúsculas e erros comuns.
Atualizado 21 de set. de 2026  · 9 min lido

Explorar com IA

ChatGPTClaudePerplexity

Se você já escreveu mais do que alguns macros em VBA, provavelmente passou por aquele momento em que precisa verificar se um texto existe dentro de uma célula. No VBA, InStr é uma daquelas funções que você acaba usando o tempo todo. Ela informa onde um trecho de texto aparece dentro de outro. Você pode usá-la para checar se um texto existe em uma célula, separar valores em um texto ou controlar lógicas condicionais em macros que dependem de padrões de texto.

Neste guia, vou apresentar a sintaxe de InStr, alguns exemplos, como funcionam os modos de comparação (essa parte confunde mais gente do que deveria) e alguns padrões que você realmente vai reutilizar.

Eu recomendo começar pela nossa trilha de habilidades Excel Fundamentals para construir uma base sólida antes de avançar para VBA, ou fazer o curso Advanced Excel Functions se você já tem alguma experiência, para aprender como funções aumentam a eficiência na análise de dados.

O que é a função InStr do VBA?

InStr é uma função do VBA que retorna a posição da primeira ocorrência de uma string dentro de outra.

Os resultados funcionam assim:

  • Se encontrar, retorna um número (a posição onde a correspondência começa)
  • Se não encontrar nada, retorna 0

Por exemplo, se “cat” aparece na posição 5 em uma string, você obtém 5. Se não estiver lá, você obtém 0.

Sintaxe do VBA InStr

Aqui está a sintaxe completa de InStr:

InStr([start], string1, string2, [compare])

Onde:

  • start (opcional): Indica ao VBA onde começar a busca. Se você não informar, o VBA começa na posição 1.

  • string1 (obrigatório): O texto completo no qual você está procurando.

  • string2 (obrigatório): O texto que você quer encontrar.

  • compare (opcional): Define como a comparação é feita (sensível a maiúsculas/minúsculas ou não). Se você não informar, o VBA usa o modo padrão, geralmente sensível a maiúsculas/minúsculas.

Observe que você pode ignorar os argumentos start e compare (InStr(string1, string2)) para uma versão mais simples. Mas, se decidir usar o argumento compare, também precisa informar o argumento start.

Como o VBA InStr funciona

Pense em InStr como ler uma frase da esquerda para a direita, um caractere por vez.

A função começa com string1, percorre o texto e procura o primeiro ponto onde string2 corresponde. No momento em que encontra a correspondência, ela para e retorna a posição onde começou.

A posição da “correspondência” é importante, já que o VBA conta a partir de 1, não de 0. Assim, o primeiro caractere de uma string é a posição 1, o segundo é 2 e assim por diante.

Valores de retorno do VBA InStr explicados

Interpretar o resultado de InStr é simples. Você pode obter:

  • Número positivo: se encontrar uma correspondência, o número indica onde ela começa.

  • 0: se não houver correspondência em nenhum lugar da string

Entretanto, se suas strings de entrada forem Null, a função retorna Null. Embora você possa ignorar isso em macros básicos, vale notar que essa diferença pode quebrar uma condição silenciosamente.

Exemplos básicos do VBA InStr

Agora, vou mostrar alguns exemplos de como usar a função InStr no VBA.

Encontrar uma palavra em uma frase

Para verificar se a palavra “before” está na observação “Deliver before noon”.

Sub Before()

    Dim result As Integer
    result = InStr("Deliver before noon", "before")
    
    MsgBox result

End Sub

O resultado do VBA acima é 9, pois “before” começa no 9º caractere.

Verificar se um caractere existe

Para verificar se o caractere “0” existe em uma string, use o VBA:

Sub ChExist()

    Dim result As Integer
    result = InStr(“A1023”, “0”)
    
    MsgBox result

End Sub

Nesse caso, qualquer resultado maior que 0 significa que o caractere foi encontrado.

Buscar desde o início de uma string

Para buscar desde o início de uma string, você não precisa especificar a posição inicial; ela começa em 1. Esse é o padrão, a menos que você diga o contrário.

Sub ChExist()

    Dim result As Integer
    result = InStr("Report_2026_Final", "2026")
    
    MsgBox result

End Sub

Como usar VBA InStr em instruções If

Ao trabalhar com uma planilha de verdade, você não está apenas procurando um número; você está tentando tomar uma decisão. A maneira mais comum de usar InStr é dentro de um If para filtrar dados.

Ao longo deste tutorial, vamos usar um conjunto de dados de exemplo, Orders, com as colunas: ID, CustomerName, Email, City e OrderNotes.

If InStr(...) > 0 Then

Como InStr retorna 0 quando não encontra nada, verificamos se há resultado quando retorna um número maior que 0.

No exemplo abaixo, ele olha para a coluna OrderNotes (coluna 5). Se encontrar a palavra “Fragile”, escreve “Handle Carefully” na coluna 6.

Sub ChExist()

    Dim i As Integer
    
    ' Loop pelas linhas 2 a 51
    For i = 2 To 51
    
        ' Verifica se as observações do pedido mencionam "Fragile"
        If InStr(Cells(i, 5).Value, "Fragile") > 0 Then
            Cells(i, 6).Value = "Handle Carefully"
        End If
        
    Next i

End Sub

Verificações condicionais por palavras‑chave e filtro de texto

Você também pode usar InStr para checar palavras‑chave em strings, especialmente quando a frase muda um pouco. Por exemplo, o código abaixo verifica se a observação contém “Call” (como “Call on arrival” ou “Call before delivery”). Em seguida, sinaliza e adiciona a tag “Cal Customer” na coluna 6.

Sub ChExist()

    Dim i As Integer
    
    ' Loop pelas linhas 2 a 51
    For i = 2 To 51
    
        ' Verifica se as observações do pedido mencionam “Call”
        If InStr(Cells(i, 5).Value, “Call”) > 0 Then
            Cells(i, 6).Value = “Call Customer”
        End If
        
    Next i

End Sub

Sensibilidade a maiúsculas/minúsculas e modos de comparação do VBA InStr

Por padrão, InStr diferencia maiúsculas de minúsculas (chamado de vbBinaryCompare). Digamos que você procure por “chicago”, mas o dado está como “Chicago”: InStr vai retornar 0.

Para corrigir isso, use o argumento compare, em que:

  • vbBinaryCompare (padrão): sensível a maiúsculas/minúsculas (“A” não é o mesmo que “a”).

  • vbTextCompare: não diferencia maiúsculas de minúsculas; “A” é o mesmo que “a”.

No exemplo abaixo, InStr retorna 0 porque procura “fragile” (minúsculo) dentro de “Fragile items”.

Sub CheckFragile()

    Dim result As Integer
    
    result = InStr(1, "Fragile items", "fragile", vbBinaryCompare)
    
    MsgBox result

End Sub

Já com vbTextCompare, o retorno é 1 para a mesma busca, ignorando o caso.

Sub CheckFragile()

    Dim result As Integer
    
    result = InStr(1, "Fragile items", "fragile", vbTextCompare)
    
    MsgBox result

End Sub

VBA InStr com posição inicial

Às vezes você não quer começar a busca no início da string. O argumento start informa ao VBA onde começar a procurar.

No exemplo abaixo, o argumento start está definido como 10, então o VBA inicia a busca a partir do 10º caractere, em vez do primeiro. Depois, encontra "delivery" mais à frente na string.

Sub CheckUrgent()

    Dim result As Integer
    
    result = InStr(10, “Deliver before noon - urgent delivery”, “delivery”)
    
    MsgBox result

End Sub

O resultado do exemplo acima é 31, que é a posição onde "delivery" começa.

Esse método é útil quando você quer a segunda ocorrência de algo ou ignorar um prefixo conhecido ao trabalhar com padrões repetidos.

VBA InStr vs. InStrRev

Como você já viu, InStr busca da esquerda para a direita. Já InStrRev busca da direita para a esquerda.

Por exemplo, usamos InStrRev para localizar o último ponto no e-mail. O resultado é 18, que é a posição do ponto antes de “com”.

Sub CheckChr()

    Dim result As Integer
    
    result = InStrRev("john.jacobs@email.com", ".")
    
    MsgBox result

End Sub

Você vai achar InStrRev mais útil quando precisa da última ocorrência de algo ou quando trabalha com nomes de arquivos, e-mails ou caminhos.

Casos de uso comuns do VBA InStr

Agora que vimos exemplos de como a função InStr funciona, vamos aos casos de uso mais comuns.

Verificar se uma célula contém uma palavra‑chave

Suponha que você tenha um conjunto de pedidos de clientes e precise sinalizar pedidos para um tratamento específico. O código olha a coluna OrderNotes e sinaliza qualquer coisa com “noon”.

Sub ChExist()

    Dim i As Integer
    
    ' Loop pelas linhas 2 a 51
    For i = 2 To 51
    
        If InStr(1, "Deliver before noon", "noon", vbTextCompare) > 0 Then
            ' Lógica para marcar como "Morning Delivery"
        End If
        
    Next i

End Sub

Validar texto no formato de e-mail

Você também pode usar InStr para checar rapidamente formatos de e-mail. Por exemplo, o código abaixo verifica se o e-mail contém @ e retorna “Valid Email Format” na coluna 6.

Sub ValidateEmail()

    Dim i As Integer
    
    ' Loop pelas linhas 2 a 51
    For i = 2 To 51
    
        If InStr(Cells(i, 3).Value, "@") > 0 Then
            Cells(i, 6).Value = "Valid Email Format"
        End If
        
    Next i

End Sub

Detectar separadores como vírgulas ou hifens

Você pode usar InStr para verificar se existe hífen, vírgula ou barra em um texto. No exemplo abaixo, o código percorre OrderNotes (coluna E), checa se há uma vírgula no texto e, em seguida, escreve um resultado na coluna F.

Sub ValidateEmail()

    Dim i As Integer
    Dim commaPos As Integer
    Dim OrderNotes As String
    
    For i = 2 To 51
        
        OrderNotes = Cells(i, 5).Value
        
        commaPos = InStr(1, OrderNotes, ",")
        
        ' Se houver vírgula, marque
        If commaPos > 0 Then
            Cells(i, 6).Value = "Has comma"
        Else
            Cells(i, 6).Value = "No comma"
        End If
        
    Next i

End Sub

Erros comuns com o VBA InStr

Mesmo sendo um desenvolvedor experiente, você pode enfrentar alguns problemas com InStr, que fazem seu código se comportar de forma inesperada. A seguir estão os problemas mais comuns que encontrei e como resolvê-los:

  • Esquecer que InStr é baseado em 1: lembre-se sempre de que as posições começam em 1, não em 0. Se você vem de Python ou JavaScript, isso estranha no começo.

  • Tratar InStr como True/False: lembre que InStr não retorna True ou False. Se você quer saber se encontrou algo, precisa verificar se o resultado é > 0.

  • Ignorar maiúsculas/minúsculas: como você já sabe, InStr diferencia maiúsculas de minúsculas por padrão. Se isso não importar, declare vbTextCompare no argumento compare.

  • Confundir string1 e string2: lembre-se sempre de que o primeiro argumento é onde você procura. O segundo é o que você está procurando. Se você buscar assim InStr(SearchTerm, FullText), vai receber 0 sempre.

VBA InStr vs. outras funções de string do VBA

Como InStr normalmente mostra onde uma string está em um texto, vamos compará-la com outras funções de string.

InStr vs. Like

O operador Like é usado para correspondência por padrão. Por exemplo, o código abaixo verifica “Fragile”, mas usa o padrão *, que significa “qualquer coisa antes ou depois”.

Sub ChExist()

    Dim i As Integer
    
    ' Loop pelas linhas 2 a 51
    For i = 2 To 51
    
        If Cells(i, 5).Value Like "*Fragile*" Then
            Cells(i, 6).Value = "Handle Carefully"
        End If
        
    Next i

End Sub

Use InStr se você só precisa saber se um texto existe, e Like quando precisar verificar textos com padrões mais complexos.

InStr vs. Replace

Embora você possa usar InStr para trocar o valor inteiro de uma célula, a função Replace substitui um texto específico dentro da célula.

No exemplo abaixo, Replace troca diretamente “Fragile” por “Handle Carefully” dentro do texto.

Sub ReplaceOrder()

    Dim i As Integer
    
    For i = 2 To 51
        Cells(i, 5).Value = Replace(Cells(i, 5).Value, "Fragile", "Handle Carefully")
    Next i

End Sub

InStr vs. Mid

A função Mid é usada para extrair texto de uma string. Por isso, você frequentemente vai usar Mid com InStr para extrair o texto depois de obter sua posição.

O código abaixo extrai o domínio de e-mails no conjunto de dados. InStr encontra onde o "@" aparece no e-mail e, em seguida, Mid começa a extração após ele. O código termina escrevendo o domínio na coluna H.

Sub ExtractDomain()

    Dim i As Integer
    Dim pos As Integer
    Dim domain As String
    
    For i = 2 To 51
        
        pos = InStr(1, Cells(i, 3).Value, "@")
        
        If pos > 0 Then
            domain = Mid(Cells(i, 3).Value, pos + 1)
            Cells(i, 8).Value = domain
        End If
        
    Next i

End Sub

InStr vs.Split

A função Split é usada para quebrar um texto em partes especificando um separador.

No exemplo abaixo, o código lê cada linha da coluna A, verifica se há vírgula e, então, divide o texto em duas partes. Ele escreve Name → coluna B e City → coluna C.

Sub SplitTextColumn()

    Dim i As Integer
    Dim lastRow As Integer
    Dim parts As Variant
    Dim text As String
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To lastRow
        
        text = Cells(i, 1).Value
        
        ' Só divide se houver vírgula
        If InStr(1, text, ",") > 0 Then
            
            parts = Split(text, ",")
            
            Cells(i, 2).Value = parts(0) ' Name
            Cells(i, 3).Value = parts(1) ' City
            
        End If
        
    Next i

End Sub

Boas práticas para usar o VBA InStr

Para evitar erros no seu VBA, recomendo as seguintes boas práticas, que têm me ajudado a ganhar tempo:

  • Use vbTextCompare quando maiúsculas/minúsculas não importarem: como a maioria dos dados reais não é consistente com capitalização, você pode perder correspondências se depender do argumento compare padrão.

  • Combine com “If” para uma lógica clara: sempre tente incluir uma lógica para retornar um valor, pois InStr sozinho só te dá um número.

  • Verifique > 0, não posições exatas, a menos que você realmente precise da posição.

  • Mantenha o parsing legível. Não empilhe funções demais em uma única linha.

Conclusão

InStr é simples, mas você vai acabar usando em todo lugar. Ela te dá a posição de uma string dentro de outra, e esse único número direciona muitas decisões no VBA: se algo existe, de onde extrair e o que a macro deve fazer em seguida. Sozinha, é apenas uma busca. Combinada com funções como Mid, Replace ou mesmo Split, vira parte de um fluxo de trabalho que realmente faz as coisas acontecerem.

Faça nosso curso Data Analysis in Excel para dominar análises avançadas. E conheça também o curso Intermediate Power Query in Excel para aprender sobre transformação de dados e uso da linguagem M.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Eu crio artigos que simplificam a ciência e a análise de dados, tornando-as fáceis de entender e acessíveis.

FAQs

O que o InStr realmente retorna?

Ela retorna a posição onde a correspondência começa. Se nada for encontrado, retorna 0.

O InStr diferencia maiúsculas de minúsculas?

Sim, InStr diferencia maiúsculas de minúsculas por padrão. ”Fragile” e ”fragile” são tratados como diferentes. Use vbTextCompare se você não quiser uma comparação sensível a maiúsculas/minúsculas.

O que significa o InStr ser baseado em 1?

O primeiro caractere de uma string é a posição 1, não 0. Isso importa quando você usa o resultado em outras funções.

O que acontece se um dos valores for Null?

O resultado também será Null, não 0.

Qual é a diferença entre InStr e InStrRev?

InStr busca da esquerda para a direita, enquanto InStrRev começa da direita para a esquerda. Use o segundo quando a última ocorrência for a que importa.

Tópicos
Excel

Aprenda com a DataCamp

Programa

Fundamentos do Excel

16 h
Adquira as habilidades essenciais que você precisa para usar o Excel, desde a preparação de dados até a elaboração de fórmulas e a criação de visualizações. Não é necessário ter experiência prévia.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow