Como acelerar Macros e reduzir CPU – Excel VBA

Como deixar Macros mais Rápidas e Diminuir o Processamento da CPU - Excel VBA
Como deixar Macros mais Rápidas e Diminuir o Processamento da CPU - Excel VBA

Introdução

Se você trabalha com macros no Excel VBA, certamente já se deparou com a necessidade de melhorar o desempenho dessas macros. Às vezes, elas podem ficar muito lentas e consumir muita CPU, tornando a execução do código demorada. Mas não se preocupe, existem algumas técnicas que você pode aplicar para deixar suas macros mais rápidas e diminuir o processamento da CPU.

1. Utilize Variáveis

A utilização de variáveis é uma das técnicas mais eficientes para melhorar o desempenho de suas macros. Ao utilizar variáveis, você permite que o código seja executado de forma mais rápida, pois as informações são armazenadas na memória do computador, evitando a necessidade de consultas repetidas na planilha.

Vamos analisar um exemplo para entender melhor. Suponha que você tenha uma macro que precise calcular a soma dos valores de uma coluna em uma planilha com 1000 linhas. Ao invés de fazer um loop em todas as células toda vez que precisar fazer a soma, você pode atribuir a coluna a uma variável e utilizar essa variável em seu código. Dessa forma, o código vai executar muito mais rápido, pois não precisará acessar o valor de cada célula de forma repetida.

Forma Ineficiente Forma Eficiente
For i = 1 to 1000 Sum = Sum + Cells(i, 1).Value Next Dim Valores() As Variant Valores = Range(“A1:A1000”).Value For i = 1 to 1000 Sum = Sum + Valores(i, 1) Next

2. Desligue Recursos Desnecessários

O Excel possui diversos recursos que podem consumir muita CPU e deixar suas macros mais lentas. É importante desligar esses recursos quando não estiverem sendo utilizados para melhorar a eficiência das macros. Alguns exemplos de recursos que podem ser desligados incluem a atualização automática de fórmulas, a exibição de animações e a verificação de erros.

Você pode desligar esses recursos diretamente no código da macro. Por exemplo, utilizando a linha de código “Application.ScreenUpdating = False”, você desliga a atualização automática da tela, o que pode acelerar significativamente a execução do código.

Recursos Ligados Recursos Desligados
Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True Application.ScreenUpdating = True Application.Calculation = xlCalculationManual Application.EnableEvents = False Application.ScreenUpdating = False

3. Evite Selecionar e Ativar Células

Uma prática comum ao criar macros é utilizar os métodos Select e Activate para manipular células e planilhas. Entretanto, esses métodos podem tornar o código lento, uma vez que cada vez que você seleciona uma célula, o Excel precisa processar essa nova seleção.

Em vez de usar a seleção e ativação de células, você pode referenciar as células diretamente em seu código. Por exemplo, em vez de escrever “Range(“A1″).Select” e “Selection.Value = 10”, você pode escrever “Range(“A1″).Value = 10”. Dessa forma, você evita o processamento desnecessário e deixa sua macro mais rápida.

Método Ineficiente Método Eficiente
Range(“A1”).Select Selection.Value = 10 Range(“A1”).Value = 10

4. Utilize Loops apropriados

Na hora de criar uma macro, é importante escolher o tipo de loop adequado para a situação. O tipo errado de loop pode tornar seu código lento e causar um alto consumo de CPU. Portanto, é essencial escolher a estrutura de loop que melhor se adapte ao seu caso.

Existem diferentes tipos de loops no Excel VBA, como o For, o Do While e o Do Until. Cada um deles tem suas características e é mais adequado para determinadas situações. Por exemplo, se você precisa executar um loop até que uma determinada condição seja atingida, o Do While ou o Do Until podem ser mais eficientes do que o For. Portanto, escolha o tipo de loop que melhor se encaixa no seu caso específico.

Loop Ineficiente Loop Eficiente
For i = 1 To 1000 Range(“A” & i).Value = “Valor” Next For Each cel In Range(“A1:A1000”) cel.Value = “Valor” Next

5. Otimize a Manipulação de Dados

Outra forma de diminuir o processamento da CPU é otimizar a maneira como você manipula os dados em sua macro. Às vezes, pequenas mudanças na forma de escrever o código podem fazer uma grande diferença no desempenho.

Por exemplo, em vez de copiar e colar valores de uma célula para outra, você pode atribuir diretamente o valor de uma célula a outra. Em vez de “Range(“A1”).Copy Destination:=Range(“B1″)”, você pode usar “Range(“B1”).Value = Range(“A1″).Value”. Dessa forma, você evita o processamento excessivo e torna sua macro mais rápida.

Forma Ineficiente Forma Eficiente
Range(“A1”).Copy Destination:=Range(“B1”) Range(“B1”).Value = Range(“A1”).Value

6. Use uma Estrutura de Dados Eficiente

A escolha da estrutura de dados correta também pode afetar o desempenho de suas macros. Utilizar a estrutura de dados adequada pode diminuir a quantidade de memória e de CPU utilizada pelo código.

Por exemplo, se você precisa armazenar uma grande quantidade de valores, utilizar uma matriz (array) em vez de um range pode ser mais eficiente. Uma matriz consome menos memória e pode ser manipulada mais rapidamente do que um range. Portanto, escolha a estrutura de dados que melhor se ajusta à sua situação.

Uso de Range Uso de Array
For Each cel In Range(“A1:A1000”) cel.Value = “Valor” Next Dim Valores() As Variant Valores = Range(“A1:A1000”).Value For i = 1 to 1000 Valores(i, 1) = “Valor” Next

7. Atualize a Calculadora de Cálculo

Por padrão, o Excel atualiza automaticamente as fórmulas em uma planilha sempre que algo é alterado. No entanto, se você tem muitas fórmulas em sua planilha, pode demorar muito tempo para que todas as fórmulas sejam recalculadas, o que pode aumentar significativamente o tempo de execução da sua macro.

Uma forma de diminuir o processamento da CPU é desligar a atualização automática de cálculo antes de executar sua macro e, em seguida, ligá-la novamente quando a macro terminar. Para fazer isso, basta adicionar as linhas de código “Application.Calculation = xlCalculationManual” no início da macro e “Application.Calculation = xlCalculationAutomatic” no final.

Cálculo Automático Cálculo Manual
Application.Calculation = xlCalculationAutomatic Application.Calculation = xlCalculationManual

8. Utilize a Função Find

Se você precisa pesquisar informações em uma planilha, a função Find pode ser uma alternativa mais eficiente do que utilizar loops. A função Find permite que você faça uma busca específica em uma coluna ou em toda a planilha, evitando loops desnecessários.

Utilizar a função Find para encontrar uma célula ou um valor específico pode economizar processamento de CPU e tornar sua macro mais rápida. Além disso, a função Find também permite fazer pesquisas avançadas, como pesquisar por células em valores específicos, em fórmulas ou em formatação condicional.

Loop Ineficiente Função Find Eficiente
For Each cel In Range(“A1:A1000”) If cel.Value = “Valor” Then ‘código para manipular célula encontrada End If Next Set cel = Range(“A1:A1000”).Find(“Valor”) If Not cel Is Nothing Then ‘código para manipular célula encontrada End If

Conclusão

Ao aplicar essas técnicas em suas macros do Excel VBA, você será capaz de melhorar a velocidade de execução e diminuir o processamento da CPU. Utilize variáveis para armazenar dados, desligue recursos desnecessários, evite a seleção e ativação de células, utilize loops apropriados, otimize a manipulação de dados, use uma estrutura de dados eficiente, atualize a calculadora de cálculo e utilize a função Find para pesquisas.

Lembre-se de testar e ajustar suas macros conforme necessário, para obter os melhores resultados de desempenho. Com o tempo, você se tornará um especialista em otimização de macros e suas aplicações serão muito mais eficientes e rápidas.

Precisa de uma Planilha Excel Personalizada?

Nos fazemos para Você

Pra quê Pagar Sistema Caro? Mensalidade? Suporte?

Se

Uma Planilha Resolve

Abri Chat
1
Chame aqui! WhatsApp das 07:00 as 22:00
Olá,
Podemos Ajudar? atendemos no WhatsApp das 07:00 as 22:00