Como extrair parte de um texto no VBA
VBA · 5 min de leitura
Em resumo
No VBA, Left(texto, n) pega os n primeiros caracteres, Right(texto, n) pega os últimos e Mid(texto, início, n) pega um trecho do meio. Dentro de um laço For até a última linha, separam um código composto em várias colunas com um clique; quando o tamanho das partes varia, use Split.

Códigos de sistema costumam guardar várias informações num texto só: "RJ-1941-159" pode ser o estado da venda, o código do produto e a quantidade. Para analisar, é preciso separar cada pedaço. No Excel, as funções ESQUERDA, DIREITA e EXT.TEXTO fazem isso; no VBA, as equivalentes são Left, Right e Mid. Usadas dentro de um laço, tratam milhares de linhas com um clique.
Neste guia você vai montar três rotinas que percorrem a base e extraem o estado, a quantidade e o código do produto.
Caso prefira aprender por vídeo, veja o vídeo abaixo:

O que você vai aprender
- Como encontrar a última linha preenchida;
- Como percorrer as linhas com For…Next;
- Left: caracteres da esquerda;
- Right: caracteres da direita;
- Mid: caracteres do meio.
A planilha da aula está disponível para download logo abaixo do vídeo.
O cenário
Na coluna B, a partir da linha 7, há códigos no formato RJ-1941-159:
| Posição | Significado | Exemplo | Vai para |
|---|---|---|---|
| 2 primeiros caracteres | Estado da venda | RJ | Coluna C |
| 4 do meio (a partir do 4º) | Código do produto | 1941 | Coluna D |
| 3 últimos caracteres | Quantidade | 159 | Coluna E |
Sem VBA, o Preenchimento Relâmpago (digite RJ na primeira linha e pressione Ctrl + E) resolve casos pontuais. O VBA entra quando isso faz parte de uma rotina maior, que roda sempre do mesmo jeito.
A estrutura da rotina
Abra o editor com Alt + F11, insira um módulo (Inserir > Módulo) e comece pela estrutura que as três rotinas compartilham:
Sub Esquerda()
Dim UltimaLinha As Long, Linha As Long
UltimaLinha = Cells(Rows.Count, "B").End(xlUp).Row
For Linha = 7 To UltimaLinha
' tratamento de cada linha
Next Linha
End Sub
Cells(Rows.Count, "B").End(xlUp).Rowvai até a última linha da planilha na coluna B e "sobe" até a primeira célula preenchida, como Ctrl + seta para cima. É a última linha com dados;For Linha = 7 To UltimaLinharepete o tratamento da linha 7 até a última.
Left: os caracteres da esquerda
Cells(Linha, "C") = Left(Cells(Linha, "B"), 2)
Left(texto, quantidade) devolve os primeiros caracteres. Em cada linha, a coluna C recebe as 2 primeiras letras da coluna B: RJ, SP, ES…
Coloque a linha dentro do For e rode com F5 (ou o botão de play). Toda a coluna C é preenchida.
Right: os caracteres da direita
Crie uma segunda rotina, copiando a estrutura:
Sub Direita()
Dim UltimaLinha As Long, Linha As Long
UltimaLinha = Cells(Rows.Count, "B").End(xlUp).Row
For Linha = 7 To UltimaLinha
Cells(Linha, "E") = Right(Cells(Linha, "B"), 3)
Next Linha
End Sub
Right(texto, quantidade) devolve os últimos caracteres. A coluna E recebe as quantidades: 159, 192, 109…
Mid: os caracteres do meio
Sub Meio()
Dim UltimaLinha As Long, Linha As Long
UltimaLinha = Cells(Rows.Count, "B").End(xlUp).Row
For Linha = 7 To UltimaLinha
Cells(Linha, "D") = Mid(Cells(Linha, "B"), 4, 4)
Next Linha
End Sub
Mid(texto, início, quantidade) é o equivalente da EXT.TEXTO. Em "RJ-1941-159": R é o 1º caractere, J o 2º, o traço o 3º, e o código começa no 4º, com 4 caracteres. A coluna D recebe 1941, 3988, 6979…
Tudo numa rotina só
Na prática, você faz as três extrações no mesmo laço:
Sub SepararCodigo()
Dim UltimaLinha As Long, Linha As Long, Codigo As String
UltimaLinha = Cells(Rows.Count, "B").End(xlUp).Row
For Linha = 7 To UltimaLinha
Codigo = Cells(Linha, "B").Value
Cells(Linha, "C").Value = Left(Codigo, 2)
Cells(Linha, "D").Value = Mid(Codigo, 4, 4)
Cells(Linha, "E").Value = Right(Codigo, 3)
Next Linha
End Sub
Quando as partes não têm tamanho fixo
Se o código fosse "RJ-19-1593" numa linha e "SP-1941-15" em outra, posições fixas não funcionariam. Use o separador:
Dim Partes() As String
Partes = Split(Cells(Linha, "B").Value, "-")
Cells(Linha, "C").Value = Partes(0) ' estado
Cells(Linha, "D").Value = Partes(1) ' produto
Cells(Linha, "E").Value = Partes(2) ' quantidade
A Split quebra o texto pelo separador e devolve as partes numa lista que começa em 0. Outras funções úteis: InStr (posição de um caractere), Len (tamanho do texto) e Trim (remove espaços).
Dicas
- Números como texto: Left, Right e Mid devolvem texto. Para somar as quantidades, converta com
CLng(Right(Codigo, 3)); - Zeros à esquerda: se o código do produto for "0194", formate a coluna como texto antes, ou o Excel vai mostrar 194;
- Salve como .xlsm, senão o código se perde. Veja como salvar arquivos com macros.
Perguntas frequentes
Qual a diferença entre Left, Right e Mid?
Left pega do começo, Right do fim, Mid de uma posição qualquer, informando início e quantidade.
Mid é igual à EXT.TEXTO?
Sim, com a mesma lógica: texto, posição inicial e número de caracteres.
Como achar a última linha no VBA?
Cells(Rows.Count, "B").End(xlUp).Row.
E se as partes tiverem tamanhos diferentes?
Use Split com o separador, ou InStr para achar a posição do separador.
Conclusão
Left, Right e Mid, dentro de um For que vai até a última linha, separam códigos compostos em colunas úteis com um clique. Quando o tamanho varia, Split resolve. Para entender o que mais o VBA faz, veja o que é o VBA e como ele funciona no Excel.
Bons estudos e até o próximo conteúdo! 🚀
Quer dominar o VBA do básico ao avançado? Conheça o curso de VBA online da Atuar: 111 aulas, certificado e monitoria 24h com IA.

