terça-feira, 9 de setembro de 2025

🔔 Automação em Excel VBA: Detector Automático de Silos de Informação

 🧐 O Problema

Nas empresas, acontece muito isso:

  • Várias áreas mantêm planilhas próprias (Financeiro, Compras, RH).

  • Cada uma tem colunas com informações parecidas (ex.: “CPF”, “CNPJ”, “Código do Cliente”).

  • Mas ninguém sabe que dados iguais estão duplicados em planilhas diferentes.

Resultado:

  • ❌ Duplicidade de registros.

  • ❌ Informações desencontradas.

  • ❌ Retrabalho e inconsistência nos relatórios.


💡 A Solução

Um Detector Automático de Silos em VBA:

  • Varre todas as planilhas do arquivo.

  • Procura colunas com cabeçalhos iguais ou semelhantes (ex.: “CNPJ” e “CNPJ Cliente”).

  • Compara os valores e identifica dados duplicados em diferentes abas.

  • Gera um relatório consolidado mostrando onde estão os mesmos clientes/fornecedores espalhados.

É como dar ao Excel uma visão global dos cadastros escondidos. 🔍


🚀 Como Funciona

  1. O usuário executa a macro "DetectarSilos".

  2. O VBA percorre todas as planilhas e monta um índice de campos-chave (ex.: CPF, CNPJ, Código, Email).

  3. Compara os dados entre as planilhas.

  4. Gera uma aba chamada "RelatorioSilos" listando:

    • Nome da planilha.

    • Coluna encontrada.

    • Valor repetido.

    • Onde mais ele aparece.


🧑‍💻 Código VBA (conceito simplificado)

Sub DetectarSilos() Dim ws As Worksheet, wsRel As Worksheet Dim ultimaCol As Long, ultimaLin As Long Dim dict As Object, chave As String Dim i As Long, j As Long, linhaRel As Long Set dict = CreateObject("Scripting.Dictionary") ' Criar/limpar relatório On Error Resume Next Set wsRel = ThisWorkbook.Sheets("RelatorioSilos") If wsRel Is Nothing Then Set wsRel = ThisWorkbook.Sheets.Add wsRel.Name = "RelatorioSilos" End If On Error GoTo 0 wsRel.Cells.Clear wsRel.Range("A1:D1").Value = Array("Planilha", "Coluna", "Valor", "Localização") linhaRel = 2 ' Varre todas as planilhas For Each ws In ThisWorkbook.Sheets If ws.Name <> wsRel.Name Then 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 chave = UCase(Trim(ws.Cells(1, j).Value)) ' Só considera cabeçalhos relevantes If chave Like "*CPF*" Or chave Like "*CNPJ*" Or chave Like "*EMAIL*" Or chave Like "*COD*" Then For i = 2 To ultimaLin If ws.Cells(i, j).Value <> "" Then If dict.exists(ws.Cells(i, j).Value) Then wsRel.Cells(linhaRel, 1).Value = ws.Name wsRel.Cells(linhaRel, 2).Value = chave wsRel.Cells(linhaRel, 3).Value = ws.Cells(i, j).Value wsRel.Cells(linhaRel, 4).Value = dict(ws.Cells(i, j).Value) linhaRel = linhaRel + 1 Else dict(ws.Cells(i, j).Value) = ws.Name & "!" & ws.Cells(1, j).Address End If End If Next i End If Next j End If Next ws MsgBox "Relatório de silos gerado com sucesso!", vbInformation End Sub

📊 Onde é útil no dia a dia?

✅ Descobrir clientes duplicados cadastrados em várias planilhas.
✅ Detectar fornecedores repetidos em compras e financeiro.
✅ Identificar funcionários cadastrados em RH e benefícios.
✅ Evitar retrabalho e inconsistências em relatórios.


🎯 Por que é útil ?

Quase ninguém pensa em usar o Excel para mapear informações duplicadas entre abas diferentes.
Essa automação cria uma visão que geralmente só bancos de dados avançados conseguem — mas aqui, direto no Excel, com VBA.

Nenhum comentário:

Postar um comentário