VBA – Função InStrRev – Localizar Texto a Partir da Direita
In this Article
Este tutorial demonstrará como usar a função InStrRev do VBA para localizar o texto a partir da direita.
Função InStrRev
A função InStrRev do VBA procura a posição de uma substring em uma cadeia de caracteres. Ela retorna a posição contando da esquerda para a direita, mas realiza a pesquisa do final da cadeia de caracteres até o início.
VBA InStrRev – Localizar Substring
A função InStrRev do VBA pode ser usada para localizar a posição de uma substring dentro de uma string.
Sub InStrRevExemplo_1()
MsgBox InStrRev("ABCABC", "C") 'O resultado é: 6
MsgBox InStrRev("ABCABC", "BC") 'O resultado é: 5
MsgBox InStrRev("La La Land", "L") 'O resultado é: 7
MsgBox InStrRev("La La Land", "La") 'O resultado é: 7
MsgBox InStrRev("La La Land", "La ") 'O resultado é: 4
MsgBox InStrRev("La La Land", "M") 'O resultado é: 0
End Sub
VBA InStrRev – Posição Inicial
A função InStrRev do VBA pode iniciar a pesquisa de uma substring a partir de uma posição atribuída, contada da esquerda para a direita.
Sub InStrRevExemplo_2()
MsgBox InStrRev("La La Land", "L") 'O resultado é: 7
MsgBox InStrRev("La La Land", "L", 8) 'O resultado é: 7
MsgBox InStrRev("La La Land", "L", 7) 'O resultado é: 7
MsgBox InStrRev("La La Land", "L", 6) 'O resultado é: 4
MsgBox InStrRev("La La Land", "L", 4) 'O resultado é: 4
MsgBox InStrRev("La La Land", "L", 3) 'O resultado é: 1
End Sub
Sensibilidade de Maiúsculas e Minúsculas do InStrRev do VBA
A função InStrRev do VBA, por padrão, diferencia maiúsculas de minúsculas. Você pode alterar esse comportamento para não diferenciar maiúsculas de minúsculas usando um parâmetro opcional. Nesse caso, você também deve definir a posição inicial da pesquisa.
Sub InStrRevExemplo_3()
'InstrRev, por padrão, diferencia maiúsculas de minúsculas
MsgBox InStrRev("La La Land", "L") 'O resultado é: 7
MsgBox InStrRev("La La Land", "l") 'O resultado é: 0
'InstrRev pode executar pesquisas sem distinção entre maiúsculas e minúsculas
MsgBox InStrRev("La La Land", "L", -1, vbTextCompare) 'O resultado é: 7
MsgBox InStrRev("La La Land", "l", -1, vbTextCompare) 'O resultado é: 7
End Sub
VBA InStrRev – Último Espaço
A função InStrRev do VBA pode localizar a posição do último espaço em uma cadeia de caracteres.
Sub InStrRevExemplo_4()
MsgBox InStrRev("La La Land", " ")
'O resultado é: 6
MsgBox InStrRev("Leonardo da Vinci", " ")
'O resultado é: 12
MsgBox InStrRev("May the Force be with you", " ")
'O resultado é: 22
End Sub
VBA InStrRev – Penúltimo Espaço
A função InStrRev do VBA pode localizar a posição do penúltimo espaço em uma cadeia de caracteres. Podemos usar a função InStrRev do VBA para encontrar o último espaço em uma string e, em seguida, podemos usar novamente InStrRev com um novo ponto de partida para encontrar a posição do penúltimo espaço.
Sub InStrRevExemplo_5()
Dim UltimaPos As Integer
UltimaPos = InStrRev("May the Force be with you", " ")
MsgBox UltimaPos 'O resultado é: 22
Dim PenultimaPos As Integer
PenultimaPos = InStrRev("May the Force be with you", " ", UltimaPos - 1)
MsgBox PenultimaPos 'O resultado é: 17
'O InStrRev iniciou a busca por espaço logo antes do último espaço
'Ele encontrará o penúltimo espaço porque busca da direita para a esquerda
End Sub
VBA InStrRev – Retornar Nome do Arquivo
A função InStrRev do VBA pode ser usada para retornar facilmente o nome do arquivo a partir de uma string que contém o caminho e o nome do arquivo. Usaremos a função InStrRev com as funções VBA Len e VBA Right.
A função Len do VBA retorna o comprimento de uma cadeia de caracteres:
MsgBox Len("XBCX") 'O resultado é: 4
A função VBA Right retorna n caracteres do final de uma cadeia de caracteres:
MsgBox Right("ABCDE", 2) 'O resultado é: DE
Podemos usar a função InStrRev para localizar a última ocorrência de “\” no nome do caminho e usar a função Len para calcular o comprimento do nome do arquivo. Em seguida, podemos extrair o nome do arquivo.
Sub InStrRevExemplo_6()
Dim CaminhoEx As String
CaminhoEx = "C:\MeusArquivos\Outros\ArquivoExemplo.pdf"
Dim NomeArquivoEx As String
NomeArquivoEx = Right(CaminhoEx, Len(CaminhoEx) - InStrRev(CaminhoEx, "\"))
MsgBox NomeArquivoEx 'O resultado é: ArquivoExemplo.pdf
'Vamos decompor esse código
MsgBox Len(CaminhoEx)
'Esse é o comprimento do nome do caminho (41)
MsgBox InStrRev(CaminhoEx, "\")
'Essa é a posição do último \ na cadeia de caracteres
MsgBox Len(CaminhoEx) - InStrRev(CaminhoEx, "\")
'Esse é o comprimento do nome do arquivo (18)
'A diferença entre o comprimento total e a posição do último \ na cadeia de caracteres
'(41-18=23)
'Agora sabemos o comprimento do nome do arquivo e, é claro, ele está no final
'A função Right é ideal para essa situação
NomeArquivoEx = Right(CaminhoEx, Len(CaminhoEx) - InStrRev(CaminhoEx, "\"))
End Sub