terça-feira, 9 de setembro de 2025

🧠 Automação em VBA: Detector Automático de Colunas com Unidade de Medida

 🧐 O Problema

Planilhas empresariais muitas vezes misturam valores e unidades de medida:

  • 📦 “100 kg” em vez de só 100.

  • 💰 “R$ 250,00” dentro da célula como texto.

  • ⛽ “35 litros” misturado com o número.

Isso atrapalha somas, filtros e cálculos — porque o Excel não entende que é número + unidade.
Normalmente alguém precisa limpar manualmente antes de usar os dados.


💡 A Solução

Um detector automático de unidades de medida com VBA:

  • Varre todas as células numéricas/textuais.

  • Identifica se há números misturados com texto (ex.: “kg”, “R$”, “L”, “unid”).

  • Separa automaticamente em duas colunas:

    • 🔢 Valor numérico.

    • 🏷️ Unidade de medida.

  • Gera um relatório indicando quais colunas continham misturas.

É como dar ao Excel uma inteligência para higienizar dados sujos de forma automática. 🧼


🚀 Como Funciona

  1. Usuário executa a macro "SepararUnidades".

  2. O VBA percorre cada aba, célula por célula.

  3. Se detectar texto com número + letras, quebra em 2 partes.

  4. Cria novas colunas: Valor e Unidade.


🧑‍💻 Código VBA (conceito simplificado)

Sub SepararUnidades() Dim ws As Worksheet Dim ultimaCol As Long, ultimaLin As Long Dim i As Long, j As Long Dim valor As String, num As String, unidade As String Dim regex As Object, matches As Object Set regex = CreateObject("VBScript.RegExp") regex.Pattern = "([0-9,.]+)\s*([A-Za-z%$]+)" regex.IgnoreCase = True For Each ws In ThisWorkbook.Sheets ultimaCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column ultimaLin = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row For j = 1 To ultimaCol For i = 2 To ultimaLin valor = Trim(ws.Cells(i, j).Value) If regex.Test(valor) Then Set matches = regex.Execute(valor) If matches.Count > 0 Then num = matches(0).SubMatches(0) unidade = matches(0).SubMatches(1) ws.Cells(i, j).Offset(0, 1).Value = num ws.Cells(i, j).Offset(0, 2).Value = unidade End If End If Next i Next j Next ws MsgBox "✅ Separação concluída! Veja colunas ao lado dos dados originais.", vbInformation End Sub

📊 Exemplo prático

OriginalValorUnidade
100 kg100kg
R$250,00250,00R$
35 litros35litros

🎯 Onde é útil?

✅ Estoques (quantidade + unidade: “100 caixas”).
✅ Financeiro (valores com “R$” dentro da célula).
✅ Produção industrial (medidas: “50m”, “120cm”).
✅ Relatórios de consumo (“20L”, “15Kg”).


🔥 Por que é útil ?

Pouca gente imagina criar no Excel um sistema automático para separar unidades de medida.
Esse tipo de tratamento geralmente é feito em softwares de ETL ou bancos de dados — aqui você tem isso direto no Excel com VBA.

Nenhum comentário:

Postar um comentário