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:
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).
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:
- Select Case no VBA – Passo a Passo com Exemplos
- Arrays no VBA Excel: O que são e como usar?
- Como Copiar e Colar no VBA – Passo a Passo
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!