#ProgramaçãoGlobal #SQLAnalytics #ValoresNulos #QualidadeDados #AuditoriaDados #DataScience #IntegridadeDados #ValidaçãoDados #BusinessIntelligence #DadosFaltantes #AnáliseExploratória #DetecçãoAnomalias #ConformidadeDados #CiênciaDados #MetodologiaAnalítica #AnáliseDiagnóstica #IntegridadeInformação #ProfissionaisDados #NullValuesAo trabalhar com pastas de trabalho grandes e complexas, muitos profissionais percebem que o Excel “trava” ou demora para responder, mas não sabem onde reside o gargalo. O uso de VBA para medir o tempo de cálculo por aba permite transformar um problema subjetivo (“a planilha está lenta”) em um diagnóstico objetivo (“a aba XYZ consome 80% do tempo de atualização”). Isso muda completamente a forma como se analisa desempenho em ambientes corporativos, onde decisões baseadas em dados passam a substituir palpites.
Sub TesteTempoCalculoPorAba()
' Subrotina: TesteTempoCalculoPorAba
' Objetivo: Medir o tempo de cálculo de cada aba da pasta de trabalho,
' identificando quais abas consomem mais tempo (inclusive por
' links internos/externos, fórmulas pesadas etc.).
' Uso: Execute a macro e observe o resultado no Painel Imediato (Ctrl+G).
'
Dim ws As Worksheet ' Variável que representará cada aba da pasta
Dim tempoInicio As Double ' Marca o instante de início do cálculo da aba
Dim tempoTotal As Double ' Armazena o tempo total de cálculo da aba (em segundos)
Dim resultado As Collection ' Coleção para armazenar resultados por aba (opcional)
Dim item As Variant ' Iterador para percorrer a coleção de resultados
' Inicializa a coleção de resultados (organiza dados por aba)
Set resultado = New Collection
' Desativa atualizações de tela para melhorar desempenho da medição
Application.ScreenUpdating = False
' Define o modo de cálculo manual para evitar recalculos automáticos
' durante a execução e focar apenas na execução de Application.Calculate
Application.Calculation = xlManual
' Inicia o loop por todas as planilhas da pasta de trabalho
For Each ws In ThisWorkbook.Worksheets
' Ativa a aba atual para garantir que o cálculo reflita o contexto da aba
' (alguns recursos como gráficos podem ser sensíveis à aba ativa)
ws.Activate
' Registra o momento de início do cálculo
tempoInicio = Timer()
' Força o cálculo de toda a pasta de trabalho
' (se quiser calcular apenas a aba atual, use ws.Calculate)
Application.Calculate
' Calcula o tempo consumido apenas para esta aba
tempoTotal = Timer() - tempoInicio
' Exibe o resultado no Painel Imediato (Ctrl+G)
Debug.Print "Aba: " & ws.Name & " - Tempo de cálculo: " & _
Round(tempoTotal, 4) & " segundos"
' Opcional: armazena resultado em uma coleção para uso posterior
' (ex.: gerar relatório em uma planilha)
resultado.Add Array(ws.Name, tempoTotal)
Next ws
' Opcional: exibir resumo em caixa de mensagem ao final
Dim tempoTotalMacro As Double
tempoTotalMacro = Timer() - tempoInicio
MsgBox "Medição concluída!" & vbCrLf & _
"Acesse o Painel Imediato (Ctrl+G) para ver o tempo de cada aba." & vbCrLf & _
"Tempo total aproximado da macro: " & Round(tempoTotalMacro, 4) & " segundos", _
vbInformation, "Medição de Tempo de Cálculo"
' Restaura o modo de cálculo automático
Application.Calculation = xlAutomatic
' Habilita novamente a atualização de tela
Application.ScreenUpdating = True
' Limpa variáveis de objeto
Set resultado = Nothing
End Sub
O código apresentado força o modo de cálculo manual (Application.Calculation = xlManual) e utiliza a função Timer() para registrar o momento antes e depois do cálculo de cada aba. Ao iterar com For Each ws In ThisWorkbook.Worksheets, temos a capacidade de isolar o impacto de cada planilha, incluindo fórmulas, tabelas dinâmicas e links internos/externos, na performance geral. Esse método é simples, mas extremamente eficaz, pois permite rastrear o tempo consumido por aba sem necessidade de ferramentas externas.
Além da medição bruta do tempo, o uso de Debug.Print para exibir o nome da aba e o tempo de cálculo em segundos cria um registro auditável dentro do próprio ambiente do Excel. Esse tipo de logging é essencial em ambientes corporativos, onde é necessário justificar decisões de refatoração, como a remoção de fórmulas pesadas ou a migração de links externos para Power Query. Ao identificar com precisão qual aba está sobrecarregando o cálculo, a equipe pode priorizar esforços e evitar retrabalho em áreas que não são críticas.

TODOS OS ARTIGOS ATÉ DEZEMBRO 25
Outra vantagem desse código é a sua flexibilidade. Com pequenas alterações, é possível adaptá‑lo para usar ws.Calculate em vez de Application.Calculate, focando apenas na aba atual, ou até mesmo gravar os resultados diretamente em uma planilha de resumo. Essa adaptabilidade torna o código uma base ideal para diagnósticos mais complexos, como monitoramento de performance em múltiplas pastas de trabalho ou integração com relatórios automáticos de saúde do modelo. Em ambientes onde o Excel é usado como plataforma de BI simples, essa capacidade de automação é inestimável.
Do ponto de vista de boas práticas, o código também demonstra técnicas importantes de otimização de macros, como desativar a atualização de tela (Application.ScreenUpdating = False) e restaurar o estado de cálculo após a execução. Esses ajustes garantem que o próprio processo de medição não interferisse nos resultados, ao mesmo tempo em que evitam travamentos visuais durante a execução. Essas práticas são fundamentais para qualquer VBA que interaja com grandes volumes de dados ou processos intensivos.
Em resumo, o uso desse código VBA para medir o tempo de cálculo por aba não é apenas sobre “fazer a macro girar mais rápido”. É sobre transformar visibilidade em controle: identificar o gargalo, justificar mudanças técnicas e propor soluções sustentáveis. Em um blog dedicado exclusivamente a VBA, esse tipo de abordagem é central, pois mostra como a automação pode ser usada não apenas para executar tarefas, mas para otimizar e profissionalizar o uso do Excel dentro de grandes organizações.
👉 Siga André Bernardes no Linkedin. Clique aqui e contate-me via What's App.











Nenhum comentário:
Postar um comentário