Você está na página 1de 7

16 Dicas para deixar a macro mais rápida

Atualização: Se essas dicas não são o suficiente, clique aqui e conheça mais outras 9.
Essa é para você que já está acostumado com a utilização das Macros em suas planilhas mas
percebe que elas poderiam rodar um pouquinho mais rápido.
Vou mostrar uma série de códigos e dicas bastante simples que podem te ajudar a ganhar ainda mais
tempo com suas planilhas automatizadas. Vamos a elas.
Se estiver com preguiça de ler, assista ao vídeo, caso contrário, continua mais abaixo.

1 – Desabilitando a atualização da tela


Este código faz com que o Excel não fique atualizando a tela mostrando toda a movimentação de
escrever fórmulas, mover em planilhas, ou qualquer coisa que sua macro faça. Isso faz com que o
computador não precise gastar tempo nem recurso atualizando a imagem a ser exibida na tela.
Application.ScreenUpdating = False 'Desabilita atualização de tela

'Seu código aqui

Application.ScreenUpdating = True 'Habilita atualização de tela

2 – Modo de cálculo manual


Por padrão o Excel utiliza o modo de cálculo automático, o que significa que sempre que você
altera o conteúdo de qualquer célula ele recalcula todas as outras de todas as abas de seu arquivo, e
quanto mais fórmulas houverem, mais demorado vai ser.
Uma forma de acelerar sua Macro é desabilitar o modo de cálculo automático, e só habilitar quando
for necessário recalcular alguma coisa na planilha.
Application.Calculation = xlManual 'Desativa modo automático de cálculo

'Seu código aqui

Application.Calculation = xlAutomatic 'Ativa modo automático de cálculo

3 – Atualizar somente a planilha (aba) atual


Esta pode ser combinada com a anterior, e só faz sentido se sua pasta de trabalho tiver mais de uma
planilha (aba).
O que ela faz é atualizar somente a planilha que está ativa, e não enquanto no modo de cálculo
automático atualiza todas as fórmulas de todas as planilhas, com este código você atualiza somente
a que estiver ativa no momento.
ActiveSheet.Calculate 'Calcula somente as fórmulas da aba ativa

4 – Evite usar a área de transferência


Quando utilizamos as funções de copiar e colar forçamos o computador a guardar em sua memória
rápida os dados que copiamos. Para acelerar, e não utilizar essa memória do computador você pode
usar os código abaixo.

Copiando e colando normalmente


Ao invés de utilizar algo do tipo:
Range("A1:A200").Copy
Range("B1").PasteSpecial
Application.CutCopyMode = False 'Limpa a área de transferência

Utilize algo como:


Range("A1:A200").Copy Destination:= Range("B1")

Copiando e colando valores


Ao invés de utilizar:
Range("A1:A200").Copy
Range("B1").PasteSpecial xlPasteValues
Application.CutCopyMode = False 'Limpa a área de transferência

Busque utilizar:
Range("B1:B200").Value = Range("A1:A200").Value

Copiando e colando fórmulas


Ao invés de usar algo como:
Range("A1:A200").Copy
Range("B1").PasteSpecial xlPasteFormulas
Application.CutCopyMode = False 'Limpa a área de transferência

Utilize:
Range("B1:B200").Formula = Range("A1:A200").Formula
5 – Inserir fórmula em várias células ao mesmo tempo
É provável que você tenha células com a mesma fórmula, normalmente em casos que você escreve
a fórmula e depois arrasta ou copia para as outras células que serão iguais.
tilizar o código anterior já acelera, a cópia, mas existe um jeito mais rápido, veja.
Ao invés de usar algo como:
Range("A1").FormulaR1C1 = "=SUM(RC[1]:RC[5])" 'Escreve fórmula na célula A1
Range("A1").Copy
Range("A1:A20").PasteSpecial xlPasteFormulas 'Copia a fórmula de A1 até A20
Application.CutCopyMode = False 'Limpa a área de transferência

Tente usar:
Range("A1:A20").FormulaR1C1 = "=SUM(RC[1]:RC[5])" 'Escreve fórmula da célula A1
a A20

6 – Evite usar .select


Toda vez que aparece em seu código algo como:
Range("A1").Select

O Excel irá selecionar aquela célula da mesma forma que você faria com o mouse, o que é
desnecessário pois leva tempo de processamento fazer isso, e você pode escrever praticamente tudo
em sua macro sem utilizar o .select.
Se for necessário selecionar alguma célula, objeto, planilha, pasta de trabalho, faça assim:
Range("A1").Activate

Você conseguirá fazer praticamente as mesmas coisas que faria usando outro método, só que mais
rápido.

7 – Limpe seu código


Se você monta boa parte de suas macros utilizando o gravador de macros uma boa prática é abrir
e analisar o código recém escrito.
O gravador escreve tudo que você faz, inclusive aquelas partes desnecessárias, como mover a barra
de rolagem, selecionar uma célula qualquer por acidente, ou qualquer outra coisa que você faça
enquanto está gravando a macro que não tem nada a ver com o que você quer fazer de fato.
Ao analisar o código recém criado você também perceberá que poderá melhorar seu código
utilizando as ouras dicas descritas aqui, substituindo alguns trechos e apagando outros.
8 – Desabilitar a atualização da barra de status
A barra de status normalmente exibe o progresso de certas ações no Excel. Por exemplo, se você
copiar / colar um intervalo, o Excel irá mostrar o progresso dessa operação na barra de status.
Muitas vezes, a ação é executada tão rápida que você não vê o progresso na barra de status. No
entanto, se a macro está trabalhando com grandes quantidades de dados, a barra de status irá ocupar
alguns recursos. É importante notar que desligar a atualização da tela é diferente de desligar a
exibição da barra de status. Ou seja, a barra de status continuará a ser atualizado mesmo se você
desativar a atualização da tela.
Application.DisplayStatusBar = False 'Desabilita atualização da barra de status
'Seu código aqui
Application.DisplayStatusBar = True 'Habilita atualização da barra de status

9 – Ignore eventos do Excel


Vamos dizer que você tem um evento Worksheet_Change implementado para Plan1 da pasta de
trabalho. Toda vez que uma célula ou intervalo é alterado em Plan1, o evento Worksheet_Change
dispara. Então, se você tem uma macro padrão que manipula várias células em Plan1, cada vez que
uma célula da planilha é alterada, a macro tem de fazer uma pausa enquanto o evento
Worksheet_Change é executado. Você pode imaginar como esse comportamento pode pesar a sua
macro. Assim, você pode dizer ao Excel para ignorar eventos enquanto a sua macro é executada.
Application.EnableEvents = False 'Desativa os eventos no excel
'Seu código aqui
Application.EnableEvents = True 'Ativa os eventos no Excel

10 – Desabilitar quebras de página


Outra oportunidade para um aumento de desempenho pode ser encontrado em quebras de página.
Cada vez que sua macro modifica o número de linhas, modifica o número de colunas, ou altera a
configuração de página de uma planilha, o Excel será forçado a tomar um tempo para recalcular
onde as quebras de página são mostrados na folha. Você pode evitar isso simplesmente escondendo
as quebras de página antes de iniciar a sua macro.
Activesheet.DisplayPageBreaks = False 'Desabilita as quebras de páginas
'Seu código aqui
Activesheet.DisplayPageBreaks = True 'Habilita as quebras de páginas

11 – Desabilite a atualização de tabelas dinâmicas


Se as suas macros interferem em tabelas dinâmicas que contêm grandes fontes de dados, é possível
que você tenha uma queda de desempenho quando estas são executadas. Isso ocorre porque cada
mudança que você faz com a estrutura da tabela dinâmica requer que o Excel recalcule todos os
valores na tabela dinâmica para cada campo. Você pode melhorar o desempenho do seu macro
suspendendo o recálculo da tabela dinâmica até que todas as alterações sejam concluídas pela
macro.
ActiveSheet.PivotTables(“PivotTable1”).ManualUpdate=True
'Seu código aqui
ActiveSheet.PivotTables(“PivotTable1”).ManualUpdate=False

12 – Utilize o With sempre que possível


Ao gravar macros, não é incomum manipular o mesmo objeto mais de uma vez. Por exemplo, o
código pode alterar a formatação da célula A1 para que ela seja sublinhado, itálico e negrito. Se
você utilizar a função de gravar macro e aplicar estas opções de formatação para a célula A1, você
teria algo parecido com isto.
Range(“A1”).Select
Selection.Font.Bold = True
Selection.Font.Italic = True
Selection.Font.Underline = xlUnderlineStyleSingle

Infelizmente, este código não é tão eficiente quanto poderia ser porque força o Excel para selecionar
e, em seguida, alterar cada propriedade separadamente. Você pode economizar tempo e melhorar o
desempenho usando o With e executar várias ações em um determinado objeto em de uma só
vez. Assim, o mesmo efeito que teríamos com o código acima pode ser obtido com o código abaixo.
With Range(“A1”).Font
.Bold = True
.Italic = True
.Underline = xlUnderlineStyleSingle
End With

13 – Evite acessar dados da planilha


Outra maneira de acelerar seus macros é limitar a quantidade de vezes que você faz referência a
dados da planilha em seu código. É sempre menos eficiente buscar os dados da planilha de trabalho
do que de memória. Ou seja, a macro vai rodar muito mais rápido se ela não tiver que interagir
repetidamente com a planilha. Por exemplo, este código simples força a macro a retornar
continuamente para Sheets ( “Plan1”). Range ( “A1”) para obter o número necessário para a
comparação.
For RelatoMês = 1 To 12
If Range(“A1”).Value = RelatoMês Then
MsgBox 1000000 / RelatoMês
End If
Next ReportMonth

Uma maneira muito mais eficiente é salvar o valor na Sheets ( “Plan1”). Range ( “A1”) em uma
variável. Desta forma, o código faz referência a variável em vez da planilha. Conforme abaixo.
Dim MeuMês as Integer
MeuMês = Range(“A1”).Value
For RelatoMês = 1 To 12
If MeuMês= RelatoMês Then
MsgBox 1000000 / RelatoMês
End If
Next RelatoMês

14 – Declare variáveis como variáveis e constantes como constantes


O mais comum é usarmos sempre as variáveis, que são objetos que armazenam um determinado
valor que pode ser alterado ao longo da execução da macro. Estes valor normalmente servem como
controladores ou auxiliares. Porém em alguns casos criamos um objeto para guardar um valor que
será constante, que não precisará ser alterado em nenhum momento do código, nestes casos
devemos declarar este objeto como uma constante. A diferença é que uma variável precisa ter o seu
valor verificado a todo momento em que ela é utilizada no código, pois ele pode variar, enquanto
que a constante é sempre o mesmo valor desde o momento em que é criada.
Assim ao invés de usar:
Dim Pi As Double
Pi = 3.14159

Utilize algo como:


Const Pi = 3.14159

15 – Utilize variáveis do tipo Boolean sempre que possível


As variáveis do tipo Boolean podem variar em apenas 2 valores, VERDADEIRO e FALSO. Isso faz
com que este típo de variável seja excelente para uso como interruptores, quando precisamos apenas
verificar se uma condição é verdadeira ou não para dar sequência ao código. E por serem tão
simples são muito leves e rápidas, portanto tente evitar código como o abaixo.
Dim Chave as Integer
Chave = 1
If Chave = 1 Then
MsgBox "Função Excel"
ElseIf Chave = 0 Then
MsgBox "Tchau!"
End If

E utilize algo como:


Dim Chave as Boolean
Chave = True
If Chave = True Then
MsgBox "Função Excel"
Else
MsgBox "Tchau!"
End If

16 – Evite selecionar planilhas e células


Esta dica já havia aparecido no artigo 7 Dicas para deixar a macro mais rápida, mas agora volta um
pouco mais detalhada.
Evite sempre que possível usar o .select isso diminui drasticamente a velocidade de sua macro.
Evite códigos como:
Worksheets("Plan1").Select
Variável = Range("A1").Value

E procure algo como:


Variável = Worksheets("Plan1").Range("A1").Value