Função INSTR
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.
A função Instr realiza exato fósforos. O VBA Like Operator pode ser usado em vez de executar correspondências / correspondência de padrões inexatas usando curingas.
Exemplo Instr
O seguinte trecho de código pesquisa a string “Look in this string” para a palavra “Look”. A função Instr retorna 1 porque o texto é encontrado na primeira posição.
123 | Sub FindSomeText ()MsgBox InStr ("Look in this string", "Look")End Sub |
Este segundo exemplo retorna 7 porque o texto é encontrado começando na 7ª posição:
123 | Sub FindSomeText2 ()MsgBox InStr ("Não olhe nesta string", "Olhe")End Sub |
Importante! A função Instr é maiúsculas e Minúsculas por padrão. Isso significa que “aparência” não corresponderá a “aparência”. Para tornar o teste sem distinção entre maiúsculas e minúsculas, leia abaixo.
Sintaxe Instr
A sintaxe para a função Instr é a seguinte:
1 | Instr ([iniciar], string, substring, [comparar]) |
[iniciar] (opcional) - Este argumento opcional é a posição inicial da pesquisa. Digite 1 para iniciar a busca a partir da posição 1 (ou deixe em branco). Digite 5 para iniciar a busca a partir da posição 5. Importante! A função INSTR calcula a posição do caractere contando a partir de 1 NÃO da posição [inicial].
fragmento - A string de texto a ser pesquisada.
substring - A string de texto a ser encontrada na string primária.
[comparar] (opcional) - Por padrão, Instr diferencia maiúsculas de minúsculas. Ao definir este argumento, você pode tornar insensível a maiúsculas e minúsculas:
Valor do argumento vb | Argumento Inteiro | Descrição |
vbBinaryCompare |
0 | (Padrão) Sensível a maiúsculas e minúsculas |
vbTextCompare |
1 | Não diferencia maiúsculas de minúsculas |
vbDatabaseCompare |
2 | Apenas MS Access. Usa informações do banco de dados para fazer a comparação. |
Posição inicial instr
A posição inicial de Instr permite que você indique a posição do caractere onde você iniciará sua pesquisa. No entanto, lembre-se de que a saída Instr sempre contará a partir de 1.
Aqui, definimos a posição inicial para 3 para pular o primeiro B:
123 | Sub Instr_StartPosition ()MsgBox InStr (3, "ABC ABC", "B")End Sub |
O resultado é 6 porque o segundo B é o 6º caractere da string.
Teste INSTR que não diferencia maiúsculas de minúsculas
Por padrão, o VBA trata “L” diferente de “l”. Em outras palavras, o VBA diferencia maiúsculas de minúsculas. Isso é verdade para todas as funções de texto. Para tornar o VBA insensível a maiúsculas e minúsculas, defina o argumento [compare] como 1 ou vbTextCompare.
123 | Public Sub FindText_IgnoreCase ()MsgBox InStr (1, "Não olhe nesta string", "olhe", vbTextCompare)End Sub |
Como alternativa, você pode adicionar Option Compare Text no topo do seu módulo de código:
1 | Texto de comparação de opções |
12345 | Texto de comparação de opçõesPublic Sub FindText_IgnoreCase2 ()MsgBox InStr ("Não olhe nesta string", "olhe")End Sub |
A opção Comparar texto afetará todo o código nesse módulo. Eu pessoalmente coloco isso no topo de qualquer módulo que lida com texto porque nunca me importo com diferenças entre maiúsculas e minúsculas.
Função InstrRev
A função Instr pesquisa a partir da esquerda. Em vez disso, você pode pesquisar da direita usando a função InstrRev. A função InstrRev funciona de forma muito semelhante à função Instr.
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev ("Look in this string", "Look")End Sub |
Assim como a função Instr, ela retornará 1 porque há apenas uma instância de “Look” no texto. Mas se adicionarmos um segundo “Look”, você verá que ele retorna a posição do “Look” mais à direita:
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev ("Look in this string Look", "Look")End Sub |
A seguir, revisaremos mais exemplos de Instr.
Exemplos InString
Se a string contém substring
Aqui, usaremos uma instrução If para testar se uma string contém uma substring de texto:
123456789 | Public Sub FindSomeText ()If InStr ("Look in this string", "look") = 0 ThenMsgBox "Sem correspondência"OutroMsgBox "Pelo menos uma correspondência"Fim seEnd Sub |
Encontrar string de texto em uma célula
Você também pode encontrar uma string em uma célula:
12345 | Sub Find_String_Cell ()If InStr (Range ("B2"). Value, "Dr.")> 0 ThenIntervalo ("C2"). Valor = "Médico"Fim seEnd Sub |
Ou percorra um intervalo de células para testar se as células contêm algum texto:
12345678910 | Sub Search_Range_For_Text ()Dim cell como rangePara cada célula no intervalo ("b2: b6")Se InStr (cell.Value, "Dr.")> 0 Entãocell.Offset (0, 1) .Value = "Doutor"Fim sePróxima célulaEnd Sub |
Encontre a posição de um personagem em uma string
Este código encontrará a posição de um único caractere em uma string e atribuirá a posição a uma variável:
1234 | Sub Find_Char ()Dim n As Longn = InStr ("Aqui Olhe Aqui", "L")End Sub |
String de pesquisa para palavra
Este código pesquisará uma string por uma palavra:
12345678910 | Sub Search_String_For_Word ()Dim n As Longn = InStr ("Olhe aqui", "Olhe")Se n = 0 entãoMsgBox "Palavra não encontrada"OutroMsgBox "Palavra encontrada na posição:" & nFim seEnd Sub |
Se a variável contiver string
Este código testará se uma variável de string contém uma string de texto:
12345678 | Sub Variable_Contains_String ()Dim str As Stringstr = "Olhe aqui"If InStr (str, "Here")> 0 ThenMsgBox "Encontrado aqui!"Fim seEnd Sub |
Instr e a função esquerda
Instr pode ser usado junto com outras funções de texto como Left, Right, Len e Mid para cortar o texto.
Com a função Left, você pode gerar o texto antes de uma string de texto:
1234567891011 | Sub Instr_Left ()Dim str As StringDim n As Longstr = "Olhe aqui"n = InStr (str, "Aqui")MsgBox Left (str, n - 1)End Sub |
Usando Instr no Microsoft Access VBA
Todos os exemplos acima funcionam exatamente da mesma forma no Access VBA e no Excel VBA.
Para saber mais, leia nosso artigo: funções de texto VBA