VBA INSTR – Localizar Texto em uma String
In this Article
Função INSTR
A função Instr do VBA verifica se uma cadeia de texto é encontrada em outra cadeia de texto. Ela retorna 0 (zero) se o texto não for encontrado. Caso contrário, ela retorna a posição do caractere em que o texto foi encontrado.
A função Instr realiza correspondências exatas. Em vez disso, o operador Like do VBA pode ser usado para realizar correspondências inexatas/correspondência de padrões usando curingas.
Exemplo de Instr
O trecho de código a seguir procura na sequência “Procure nesta String” a palavra “Procure”. A função Instr retorna 1 porque o texto foi encontrado na primeira posição.
Sub EncontreAlgumTexto()
MsgBox InStr("Procure nesta String", "Procure")
End Sub
Esse segundo exemplo retorna 5 porque o texto é encontrado a partir da 5ª posição:
Sub EncontreAlgumTexto2()
MsgBox InStr("Não Procure nesta string", "Procure")
End Sub
Importante! A função Instr faz distinção entre maiúsculas e minúsculas por padrão. Isso significa que “procure” não corresponderá a “Procure”. Para tornar o teste insensível a maiúsculas e minúsculas, leia abaixo.
Sintaxe de Instr
A sintaxe da função Instr é a seguinte:
Instr( [start], string, substring, [compare] )
[start] (opcional) – Esse argumento opcional é a posição inicial da pesquisa. Digite 1 para iniciar a pesquisa a partir da posição 1 (ou deixe em branco). Digite 5 para iniciar a pesquisa 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 [start] .
string – A cadeia de texto a ser pesquisada.
substring – A cadeia de texto a ser encontrada na cadeia primária.
[compare] (opcional) – Por padrão, Instr faz distinção entre maiúsculas e minúsculas. Ao definir esse argumento, você pode tornar Instr insensível a maiúsculas e minúsculas:
Argumento vb Valor |
Argumento Inteiro | Descrição |
vbBinaryCompare |
0 |
(Padrão) Diferencia maiúsculas de minúsculas |
vbTextCompare |
1 |
Não diferencia maiúsculas de minúsculas |
vbDatabaseCompare |
2 |
Somente MS Access. Usa informações do banco de dados para realizar a comparação. |
Posição Inicial do Instr
A posição inicial do Instr permite indicar a posição do caractere em que a pesquisa será iniciada. Entretanto, lembre-se de que a saída do Instr sempre contará a partir de 1.
Aqui, definimos a posição inicial como 3 para pular o primeiro B:
Sub Instr_PosicaoInicial()
MsgBox InStr(3, "ABC ABC", "B")
End Sub
O resultado é 6 porque o segundo B é o sexto caractere da cadeia.
Teste de INSTR com Distinção entre Maiúsculas e Minúsculas
Por padrão, o VBA trata “L” diferente de “l”. Em outras palavras, o VBA é sensível a maiúsculas e minúsculas. Isso se aplica a 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.
Public Sub EncontrarTexto_IgnorarMaiusculasMinusculas()
MsgBox InStr(1, "Não Procure nesta string", "procure", vbTextCompare)
End Sub
Como alternativa, você pode adicionar Option Compare Text à parte superior de seu módulo de código:
Option Compare Text
Public Sub FEncontrarTexto_IgnorarMaiusculasMinusculas2()
MsgBox InStr("Não Procure nesta string", "procure")
End Sub
A opção Compare Text afetará todo o código desse módulo. Pessoalmente, coloco essa opção na parte superior de qualquer módulo que lide com texto porque nunca me preocupo com diferenças de maiúsculas e minúsculas.
Função InstrRev
A função Instr pesquisa a partir da esquerda. Em vez disso, você pode pesquisar a partir da direita usando a função InstrRev. A função InstrRev funciona de forma muito semelhante à função Instr.
Sub EncontreAlgumTexto_PartindoDaDireita()
MsgBox InStrRev("Procure nesta String", "Procure")
End Sub
Assim como a função Instr, ela retornará 1 porque há apenas uma instância de “Procure” no texto. Mas se adicionarmos um segundo “Procure”, você verá que ela retorna a posição do “Look” mais à direita:
Sub EncontreAlgumTexto_PartindoDaDireita()
MsgBox InStrRev("Procure nesta String Procure", "Procure")
End Sub
A seguir, analisaremos mais exemplos de Instr.
Codificação VBA facilitada
Pare de procurar códigos VBA on-line. Saiba mais sobre o AutoMacro – um construtor de código VBA que permite que os iniciantes codifiquem procedimentos do zero com conhecimento mínimo de codificação e com muitos recursos que economizam tempo para todos os usuários!
Exemplos de InString
Se a String Contiver uma Substring
Aqui usaremos uma instrução If para testar se uma string contém uma substring de texto:
Public Sub EncontreAlgumTexto()
If InStr("Procure nesta string", "procure") = 0 Then
MsgBox "Não há correspondência"
Else
MsgBox "Pelo menos uma correspondência"
End If
End Sub
Localizar String em uma Célula
Você também pode localizar uma string em uma célula:
Sub Encontrar_String_Celula()
If InStr(Range("B2").Value, "Dr.") > 0 Then
Range("C2").Value = "Doutor"
End If
End Sub
Ou percorrer um intervalo de células para testar se as células contêm algum texto:
Sub Procurar_Texto_No_Intervalo()
Dim celula As Range
For Each celula In Range("b2:b6")
If InStr(celula.Value, "Dr.") > 0 Then
celula.Offset(0, 1).Value = "Doutor"
End If
Next celula
End Sub
Localizar a Posição de um Caractere em uma String
Esse código localizará a posição de um único caractere em uma cadeia de caracteres e atribuirá a posição a uma variável:
Sub Encontrar_Carac()
Dim n As Long
n = InStr("Aqui Procure Aqui", "P")
End Sub
Pesquisar Palavra na String
Esse código pesquisará uma palavra em uma String:
Sub Procurar_Palavra_Na_String()
Dim n As Long
n = InStr("Aqui Procure Aqui", "Procure")
If n = 0 Then
MsgBox "Palavra não encontrada"
Else
MsgBox "Palavra encontrada na posição: " & n
End If
End Sub
Se a Variável Contiver uma String
Esse código testará se uma variável de string contém uma string de texto:
Sub Variavel_Contem_String()
Dim str As String
str = "Procure Aqui"
If InStr(str, "Aqui") > 0 Then
MsgBox "Aqui encontrado!"
End If
End Sub
Instr e a Função Left
A função Instr pode ser usada 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 cadeia de texto:
Sub Instr_Left()
Dim str As String
Dim n As Long
str = "Procure Aqui"
n = InStr(str, "Aqui")
MsgBox Left(str, n - 1)
End Sub
Uso de 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 do VBA