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.

Como extrair parte de um texto no VBA

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çãoSignificadoExemploVai para
2 primeiros caracteresEstado da vendaRJColuna C
4 do meio (a partir do 4º)Código do produto1941Coluna D
3 últimos caracteresQuantidade159Coluna 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).Row vai 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 UltimaLinha repete 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.

Continue aprendendo