Função Excel VBA InStr - Explicada com Exemplos

Ontem, recebi um e-mail de um dos meus leitores - junho.

Ela queria saber como aplicar o formato de fonte em negrito a uma parte específica de uma string dentro de uma célula. Por exemplo, aplique o formato em negrito apenas à palavra ‘Hello’ de ‘Hello World’.

E ela queria fazer isso para centenas de células de uma vez.

Como não há nenhuma funcionalidade embutida no Excel que possa fazer isso, criei uma macro simples que usa o Função Excel VBA InStr (você verá como fazer isso no Exemplo 4 neste tutorial).

Mas primeiro, vamos ver como funciona a função Excel VBA InStr!

Função Excel VBA InStr

Neste tutorial, vou explicar o uso da função InStr no Excel VBA e ver alguns exemplos práticos onde ela pode ser usada.

Função Excel VBA InStr - Introdução

A função InStr encontra a posição de uma substring especificada dentro da string e retorna a primeira posição de sua ocorrência.

Por exemplo, se você quiser encontrar a posição de 'x' em 'Excel', usar a função Excel VBA InStr retornará 2.

Sintaxe da função InStr

InStr ([Iniciar], Cadeia1, Cadeia2, [Comparar])
  • [Começar] - (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 eu quiser que a pesquisa comece do início, irei inserir o valor como 1. Se eu quiser que comece com o terceiro caractere em diante, usarei 3. Se omitido, o valor padrão 1 será usado.
  • String1 - Esta é a string principal (ou string pai) na qual você deseja pesquisar. Por exemplo, se você está procurando a posição de x no Excel, String 1 seria “Excel”.
  • String2 - Esta é a substring que você está procurando. Por exemplo, se você está procurando a posição de x no Excel, String2 seria x.
  • [Comparar] - (argumento opcional) Você pode especificar um dos três valores a seguir para o argumento [comparar]:
    • vbBinaryCompare - Isso faria uma comparação de personagem por personagem. Por exemplo, se você estiver procurando por 'x' em 'Excel', ele retornará 2, mas se você estiver procurando por 'X' em '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 o padrão.
    • vbTextCompare - Isso faria uma comparação textual. Por exemplo, se você procurar 'x' ou 'X' no Excel, ele retornará 2 em ambos os casos. Este argumento ignora as maiúsculas e minúsculas. Você também pode usar 1 em vez de vbTextCompare.
    • vbDatabaseCompare - Isso é usado apenas para o Microsoft Access. Ele usa as informações do banco de dados para realizar a comparação. Você também pode usar 2 em vez de vbDatabaseCompare.

Notas adicionais sobre a função InStr VBA do Excel:

  • InStr é uma função VBA e não uma função de planilha. Isso significa que você não pode usá-lo dentro da planilha.
  • Se 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 de uso da função Excel VBA InStr

Exemplo 1 - Encontrando a posição desde o início

Neste exemplo, usarei a função InStr para encontrar a posição de ‘V’ em ‘Excel VBA’ desde o início.

O código para isso seria:

Sub FindFromBeginning () Posição Dim como Inteiro Posição = InStr (1, "Excel VBA", "V", vbBinaryCompare) MsgBox Position End Sub

Quando você executar este código, ele mostrará uma caixa de mensagem com o valor 7, que é a posição de ‘V’ na string ‘Excel VBA’.

Exemplo 2 - Encontrando a posição desde o início da segunda palavra

Suponha que eu queira encontrar a posição de 'o' na frase - 'A rápida raposa marrom pula sobre o cachorro preguiçoso'

No entanto, desejo que a pesquisa comece com a segunda palavra em diante.

Nesse caso, precisamos alterar o argumento [Start] para nos certificarmos de que ele especifica a posição de onde a segunda palavra começa.

Aqui está o código que fará isso:

Sub FindFromSecondWord () Dim Position As Integer Position = InStr (4, "A raposa marrom rápida pula sobre o cachorro preguiçoso", "the", vbBinaryCompare) MsgBox Position End Sub

Este código mostrará a caixa de mensagem com o valor 32, pois especificamos a posição inicial como 4. Portanto, ele ignora o primeiro ‘The’ e encontra o segundo ‘the’ na frase.

Se quiser torná-lo mais dinâmico, você pode aprimorar o código para que ele ignore automaticamente a primeira palavra.

Aqui está o código aprimorado que fará isso:

Sub FindFromSecondWord () Dim StartingPosition As Integer Dim Position As Integer StartingPosition = InStr (1, "A raposa marrom rápida salta sobre o cão preguiçoso", "", vbBinaryCompare) Position = InStr (StartingPosition, "A raposa marrom rápida salta sobre o preguiçoso dog "," the ", vbBinaryCompare) MsgBox Position End Sub

Este código primeiro encontra a posição de um caractere de espaço e o armazena na variável StartingPosition.

Em seguida, ele usa essa variável como a posição inicial para procurar a palavra 'o'.

Portanto, ele retorna 32 (que é a posição inicial de 'o' após a primeira palavra).

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

Você pode criar facilmente uma função personalizada para localizar a posição de @ em um endereço de e-mail usando a função Excel VBA InStr.

Aqui está o código para criar a função personalizada:

Função FindPosition (Ref As Range) As Integer Dim Position As Integer Position = InStr (1, Ref, "@") FindPosition = Position 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.

Da mesma forma, você pode criar uma função personalizada para encontrar a posição de qualquer substring dentro da string principal.

Exemplo 4 - Destacando uma parte da string dentro das células

Esta é a consulta que foi feita por June (meu leitor que também me inspirou a escrever este tutorial).

Aqui está um exemplo de dados no formato que junho me enviou:

Sua consulta era colocar os números fora do colchete em negrito.

Aqui está o código que criei que faz isso:

Sub Negrito () Dim rCell como intervalo Dim Char como inteiro para cada rCell na seleção CharCount = Len (rCell) Char = InStr (1, rCell, "(") rCell.Characters (1, Char - 1) .Font.Bold = True Next rCell 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 do colchete de abertura usando a função InStr. Em seguida, ele altera a fonte do texto antes do colchete.

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).

Você também pode gostar dos seguintes tutoriais do Excel VBA:

  • Função SPLIT do Excel VBA.
  • Função VBA TRIM.
  • The Ultimate Guide to Excel VBA Loops.
  • Um guia para iniciantes no uso do For Next Loop no Excel VBA.
  • Como criar e usar um suplemento do Excel.
  • Como combinar várias pastas de trabalho em uma pasta de trabalho do Excel.
  • Como contar células coloridas no Excel.
  • Exemplos úteis de macros VBA do Excel para iniciantes.
  • Como classificar dados no Excel usando VBA (um guia passo a passo)

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave