Função VBA InStr – Guia de Uso Passo a Passo

Quer aprender a trabalhar com a Função VBA InStr? Então você está no lugar certo!

Quem utiliza o VBA diariamente, é provável que já tenha ao menos ouvido falar da função VBA InStr. Contudo, quem está começando em sua jornada de aprendizados no VBA, pode ser que ainda não conheça ou não saiba aplicá-la na prática.

E pensando nisso, criamos este guia onde mostraremos passo a passo para utilizar essa função. Se interessou pelo assunto? Então confira os detalhes a seguir:

Afinal, o que é a Função VBA InStr?

A Função VBA InStr é uma maneira de descobrir a posição de uma determinada substring em uma string.

Dentro da programação VBA (ou de qualquer outra linguagem de programação), considera-se uma string toda sequência de caracteres que são usados para formar frases e palavras.

Neste caso, a função VBA Instr verifica se uma string de texto é encontrada em outra string de texto. Retorna 0 se o texto não for encontrado. Caso contrário, ele retorna a posição do caractere onde o texto foi encontrado. Por exemplo, se você quiser encontrar a posição da letra ‘x’  na palavra ‘Excel’, ao usar a função VBA InStr retornará 2.

Podemos utilizar essa função em diversos casos onde é necessário descobrir a posição de uma determinada substring em uma string. Alguns exemplos comuns são extrair texto ou localizar a posição de um texto de uma planilha ou ainda, aplicar a formatação negrito em parte de um grande conjunto de textos.


Sintaxe da função InStr

A sintaxe da função é a seguinte:

InStr([Start],String1, String2,[Compare])

Onde:

Start: Argumento opcional. Este é um valor inteiro que informa à função InStr a posição inicial a partir da qual ela deve começar a procurar. Por exemplo, se você quiser que a pesquisa comece do início, basta inserir o valor como 1. Se você quiser que comece com o terceiro caractere em diante, use 3. Se omitido, o valor padrão 1 será usado.

String1: Esta é a string principal na qual você deseja pesquisar. Por exemplo, se você está procurando a posição de x na palavra Excel, String1 será “Excel”.

String2: Representa a substring que você está procurando. Por exemplo, se você está procurando a posição da letra x na palavra Excel, então o argumento String2 será x.

[Compare]: Argumento opcional. Você pode especificar um dos três valores a seguir para o argumento [compare]:

  • vbBinaryCompare – Realiza uma comparação de caractere por caractere. Por exemplo, se você estiver procurando pela letra ‘x’ na palavra Excel’, esta opção retornará 2, mas se você estiver procurando por ‘X’ no ‘Excel’, ele retornará 0 porque X está em maiúsculas. Você também pode usar 0 em vez de vbBinaryCompare. Se o argumento [Compare] for omitido, será considerado como padrão.
  • vbTextCompare – Esta opção faz comparação textual. Por exemplo, se você procurar ‘x’ ou ‘X’ no Excel, ele retornará 2 em ambos os casos. Você também pode usar 1 em vez de vbTextCompare.
  • vbDatabaseCompare – Esta opção é usada apenas para Microsoft Access. Ela usa as informações do banco de dados para realizar a comparação. Você também pode usar 2 em vez de vbDatabaseCompare.

Informações extras sobre a função InStr VBA do Excel

  • InStr é uma função do VBA e não uma função de planilha. Isso significa que você não pode usá-lo dentro da planilha.
  • Se o argumento String2 (que é a substring cuja posição você está procurando) estiver vazia, a função retornará o valor do argumento [Start].
  • Se a função InStr não puder encontrar a substring dentro da string principal, ela retornará 0.

Agora, vamos dar uma olhada em alguns exemplos práticos de uso da função Excel VBA InStr.

Exemplo 1: O argumento Start é omitido





Neste primeiro exemplo, temos que encontrar a posição do caractere “a” na palavra “americana”. Neste caso, o código ficará da seguinte maneira:

Sub EncontraCaractere()
Dim Posição As Integer
Posição = InStr("americana", "a")
MsgBox Posição
End Sub

Como resultado, teremos 1, pois o caractere “a” está na primeira posição na palavra “americana”.

Exemplo 2: O argumento Start é especificado

Neste segundo exemplo, temos que encontrar a posição do caractere “a” na palavra “americana”. No entanto, busca deve começar na terceira posição. Neste caso, o código ficará da seguinte maneira:

Sub EncontraCaractere()
Dim Posição As Integer
Posição = InStr(3, "americana", "a")
MsgBox Posição
End Sub

Observe que como a pesquisa começa a partir da terceira letra (n), a função VBA InStr no Excel ignora a primeira ocorrência (primeira posição) do caractere “a”. Portanto, neste caso, o caractere “a” está na sétima posição na palavra “americana”.

Exemplo 3: Pesquisa que diferencia maiúsculas de minúsculas

Agora suponha que você precise encontrar a posição do caractere “A” na palavra “americana”. Neste caso, vamos fornecer o argumento de comparação vbBinaryCompare para a função VBA InStr. O código ficará da seguinte maneira:

Sub EncontraCaractere()
Dim Posição As Integer
Posição = InStr(1, "americana", "A", vbBinaryCompare)
MsgBox Posição
End Sub




Observe que neste caso, o resultado será 0, pois como o argumento  vbBinaryCompare é fornecido, a função VBA InStr no Excel procura pela letra maiúscula “A”.

Portanto, a função retorna 0 porque não conseguiu encontrar a letra maiúscula “A” na palavra “americana”.

Exemplo 4: Pesquisa que não diferencia maiúsculas de minúsculas

Por outro lado, se quisermos encontrar a posição do caractere “A” na palavra “americana” usando a abordagem que não diferencia maiúsculas de minúsculas, então podemos fazer isso fornecendo o argumento de comparação vbTextCompare para a função VBA InStr.

Neste caso, o código ficará da seguinte maneira:

Sub EncontraCaractere()
Dim Posição As Integer
Posição = InStr(1, "americana", "A", vbTextCompare)
MsgBox Posição
End Sub

Observe que uma vez que o argumento vbTextCompare é fornecido, a função InStr ignora a diferenciação de maiúsculas e minúsculas.

Exemplo 5: Encontrando a posição de @ no endereço de e-mail

Um uso bastante prático da função VBA InSt é possibilidade de usá-la para criar facilmente uma função personalizada para localizar a posição de caractere em uma célula.

Para exemplificar, vamos criar uma função personalizada para localizar a posição de @ em um endereço de e-mail. Neste caso, o código ficará da seguinte maneira:

Function PosiçãoArroba(Ref As Range) As Integer
Dim Posição As Integer
Posição = InStr(1, Ref, "@")
PosiçãoArroba = Posição
End Function

Agora você pode usar esta função personalizada como qualquer outra função de planilha. Receberá uma referência de célula como entrada e fornecerá a posição de @ nela. Veja o exemplo abaixo:

Encontrando a posição de @ no endereço de e-mail

Do mesmo modo, você pode criar uma função personalizada para encontrar a posição de qualquer substring dentro da string principal.




Exemplo 6: Destacando uma parte da string dentro das células

Você também pode usar a Função VBA InStr para aplicar formatação personalizada a uma parte específica de uma string dentro de uma célula.

Neste exemplo, queremos aplicar Negrito apenas aos caracteres antes de “-“. Neste caso, o código ficará da seguinte maneira:

Sub Negrito()
Dim IntervaloCell As Range
Dim Char As Integer
For Each IntervaloCell In Selection
ContarCaracteres = Len(IntervaloCell)
Char = InStr(1, IntervaloCell, "-")
IntervaloCell.Characters(1, Char - 1).Font.Bold = True
Next IntervaloCell
End Sub

O código acima usa o loop For Each para percorrer cada uma das células da seleção. Ele identifica a posição do caractere “” usando a função InStr. Em seguida, ele altera a fonte do texto antes caractere “-“.

Para usar este código, você precisa copiar e colar em um módulo no editor VB.

Depois de copiar e colar o código, selecione as células nas quais deseja fazer essa formatação e execute a macro  (conforme mostrado abaixo).

Usando a Função VBA InStr

Exemplo 7: Ocultando determinadas planilhas

Neste exemplo, temos cinco planilhas no Excel com os nomes: Resumo, Mês 1, Mês 2, Mês 3 e Mês 4.

Neste caso, queremos ocultar todas as planilhas, exceto a planilha “Resumo”. Ou seja, precisamos fazer um loop para que o VBA percorra todas as planilhas da pasta de trabalho e oculte todas que contêm a palavra “Mês”.

Neste caso, o código ficará da seguinte maneira:

Sub Oculta_Planilha_Específica()
Dim Planilha As Worksheet

For Each Planilha In ActiveWorkbook.Worksheets
If InStr(Planilha.Name, "Mês") > 0 Then
Planilha.Visible = xlSheetVeryHidden
End If
Next Planilha
End Sub

Ao executarmos o códigos, todas as planilhas que contêm o a palavra “Mês”, ficarão ocultas.


Da mesma forma, podemos voltar e exibir essas planilhas que contêm a palavra “Mês” em seu nome. O código neste caso, ficará conforme mostrado abaixo:

Sub Oculta_Planilha_Específica()
Dim Planilha As Worksheet
For Each Planilha In ActiveWorkbook.Worksheets
If InStr(Planilha.Name, "Mês") > 0 Then
Planilha.Visible = xlSheetVisible
End If
Next Planilha
End Sub

Confira também as seguintes dicas de Excel:

E então,  o que achou do uso da Função VBA InStr? Caso tenha ficado com alguma dúvida, basta deixar o seu comentário abaixo!