Para manipular texto em VBA, use Left(texto; núm_caracteres) para pegar caracteres do início, Right(texto; núm_caracteres) para pegar do fim, Mid(texto; posição_inicial; núm_caracteres) para pegar de qualquer ponto do meio, InStr(texto; procurado) para descobrir em que posição um trecho aparece, e Replace(texto; procurado; substituto) para trocar um trecho por outro dentro da string.
Você já precisou que uma macro separasse informações que vêm juntas dentro de uma única célula — como um código de produto colado com o ano, ou um nome de cliente junto com um endereço de e-mail entre parênteses?
Sem dominar as funções de texto do VBA, essa separação acaba dependendo de fórmulas de planilha auxiliares, de digitação manual ou de gambiarras com o recurso Texto para Colunas, que não escalam quando o formato do texto varia de linha para linha ou quando o processo precisa rodar sozinho, sem intervenção humana.
Neste artigo iremos mostrar a sintaxe das cinco funções de texto mais usadas em VBA — Left, Right, Mid, InStr e Replace — e um exemplo prático que combina várias delas para separar informações de um texto composto.
LEFT: pegando caracteres do início do texto
A função Left retorna uma quantidade específica de caracteres, contando a partir do início do texto: Left(texto, núm_caracteres). Por exemplo, Left(“PROD-2024-A1500”, 4) retorna “PROD”, os quatro primeiros caracteres da string. Repare que, em código VBA, os argumentos são sempre separados por vírgula, mesmo no Excel em português — a diferença de ponto e vírgula só se aplica a fórmulas digitadas dentro de uma célula da planilha.
RIGHT: pegando caracteres do fim do texto
A função Right funciona de forma espelhada, contando a partir do fim do texto: Right(texto, núm_caracteres). No mesmo exemplo, Right(“PROD-2024-A1500”, 6) retorna “A1500”, os seis últimos caracteres — útil quando você sabe o tamanho fixo da parte que precisa, mas não a posição exata dentro da string toda.
MID: pegando caracteres do meio do texto
A função Mid é a mais flexível das três: Mid(texto, posição_inicial, núm_caracteres) retorna um trecho a partir de qualquer posição, não só do início ou do fim. Em Mid(“PROD-2024-A1500”, 6, 4), o VBA começa a contar na posição 6 e pega 4 caracteres, retornando “2024”. Se você omitir o terceiro argumento, o Mid retorna tudo a partir da posição informada até o fim do texto.
INSTR: encontrando a posição de um texto dentro de outro
Antes de usar Left, Right ou Mid na prática, geralmente você precisa descobrir onde um caractere aparece dentro do texto — e é isso que a função InStr faz: InStr([posição_inicial,] texto, procurado) retorna o número da posição onde o texto procurado começa, ou 0 se ele não for encontrado. Por exemplo, InStr(“PROD-2024-A1500”, “-“) retorna 5, porque o primeiro hífen está na quinta posição da string. Combinando InStr com Mid, você extrai um trecho mesmo sem saber a posição exata de antemão, só o caractere que serve de referência.
REPLACE: substituindo um trecho de texto por outro
A função Replace troca todas as ocorrências de um trecho por outro dentro de uma string: Replace(texto, procurado, substituto). Por exemplo, Replace(“PROD-2024-A1500”, “-“, “/”) retorna “PROD/2024/A1500”, trocando todos os hifens por barras de uma vez. Replace também aceita argumentos opcionais de posição inicial, número máximo de substituições e forma de comparação, mas na maioria dos casos só os três primeiros já resolvem.
Comparação sem diferenciar maiúsculas de minúsculas
Por padrão, o InStr diferencia maiúsculas de minúsculas (“Cliente” é diferente de “cliente”). Para ignorar essa diferença, adicione o argumento vbTextCompare: InStr(1, texto, “cliente”, vbTextCompare) encontra a palavra independente de como ela foi digitada. O Replace aceita o mesmo argumento na sexta posição.
Exemplo prático: separando nome e e-mail de um texto composto
Imagine uma célula com o texto no formato usado por clientes de e-mail, “Maria Souza <maria.souza@empresa.com>”, e a necessidade de separar o nome e o endereço de e-mail em duas células diferentes:
| A | |
|---|---|
| 1 | Maria Souza <maria.souza@empresa.com> |
Sub ExtrairNomeEEmail()
Dim texto As String
Dim posAbre As Integer, posFecha As Integer
texto = Range(“A1”).Value
posAbre = InStr(texto, “<“)
posFecha = InStr(texto, “>”)
Dim nome As String, email As String
nome = Trim(Left(texto, posAbre – 1))
email = Mid(texto, posAbre + 1, posFecha – posAbre – 1)
Range(“B1”).Value = nome
Range(“C1”).Value = email
End Sub
Com o texto do exemplo, a macro grava “Maria Souza” na célula B1 e “maria.souza@empresa.com” na célula C1 — o InStr localiza as posições dos sinais “<” e “>”, o Left pega tudo antes do primeiro, e o Mid pega exatamente o que está entre os dois.
Outras funções de texto que valem a pena conhecer
Além das cinco funções principais deste artigo, vale conhecer Len (retorna o número de caracteres de um texto), Trim (remove espaços em branco do início e do fim) e UCase/LCase (convertem o texto para maiúsculas ou minúsculas) — todas costumam aparecer junto com Left, Right, Mid, InStr e Replace em rotinas de limpeza e organização de texto.
Erros comuns
Um erro frequente é passar para o Mid um número de posição inicial maior do que o próprio tamanho do texto, o que retorna uma string vazia em vez de erro (o que pode mascarar um problema no código). Outro erro comum é esquecer que o InStr retorna 0 (não um erro) quando o texto procurado não existe — se você usar esse 0 diretamente dentro de um Mid sem checar antes, o resultado sai deslocado ou incorreto.
Disponibilidade
Left, Right, Mid, InStr e Replace estão disponíveis em todas as versões do VBA no Excel para Windows e Mac. No Google Sheets, o equivalente em Apps Script (JavaScript) usa métodos como substring, indexOf e replace, com sintaxe diferente mas lógica equivalente.
Perguntas frequentes
Em VBA os argumentos de uma função usam vírgula ou ponto e vírgula?
Sempre vírgula, mesmo no Excel configurado em português. A troca de vírgula por ponto e vírgula só acontece em fórmulas digitadas diretamente numa célula da planilha, não dentro do código VBA.
O que o InStr retorna se o texto procurado não existir?
Retorna 0. Por isso é importante checar esse valor (por exemplo, com um If InStr(…) > 0) antes de usar o resultado dentro de um Mid ou Left, para evitar cortar o texto errado.
Left, Right e Mid alteram o texto original da célula?
Não. Essas três funções sempre retornam um novo valor de texto, sem modificar o conteúdo original da célula ou variável de onde o texto veio — para atualizar a célula, é preciso atribuir explicitamente o resultado a ela, como em Range(“B1”).Value = resultado.
Veja também: Como Acessar o Editor VBA no Excel e Inserir um Módulo, o primeiro passo antes de testar os códigos deste artigo.
Compartilhe ou Comente
Se você curtiu esse artigo aonde mostramos como usar as funções Left, Right, Mid, InStr e Replace para manipular texto dentro de uma macro VBA, com um exemplo prático de separação de nome e e-mail, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.
Qual dessas cinco funções você mais usa no seu dia a dia com VBA? Já teve que tratar um texto bagunçado numa planilha que essas funções resolveriam? Conta para nós nos comentários!