Notifications
Clear all

Referenciar coluna inteira é errado e danoso.

1 Posts
1 Usuários
0 Reactions
1,038 Visualizações
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Galera, me deparei com um problema de consumo de memória pelo Excel, e queria compartilhar o problema e a solução...

Via código estou gerando uma pasta de trabalho com mais de 90 planilhas, e em cerca de 25 há alguns SOMASE() olhando para uma ou mais planilhas...
Até aí tudo bem, mas quando abri o Gerenciador de Tarefas, a cada inserção de fórmulas numa coluna (intervalo de 200 a 300 linhas no máximo), o consumo de memória subia em cerca de 10MB. Mas pensa só, 25 planilhas, vezes 4 colunas de fórmula, vezes 10 MB, o consumo estava beirando 900MB...

Entrei em ação para descobrir o motivo, e tentar reduzir este consumo absurdo.
Já sabíamos que referenciar colunas inteiras em fórmulas poderia prejudicar o consumo e desempenho do Excel, hoje eu conseguí quantificar isso.
Descobri que há uma diferença gigantesca no consumo de memória quando fazemos a referencia a uma coluna inteira ou somente ao intervalo específico.

Vamos lá:
Este exemplo consome muito da memória disponível para o Excel, portanto, evitem ao máximo usar esse tipo de referência.

=(SOMASE('Dados 1'!$D:$D;$D8;'Dados 1'!$F:$F)*'Dados 1'!$C$5+SOMASE('Dados 2'!$D:$D;$D8;'Dados 2'!$F:$F)*'Dados 2'!$C$5)/$C$5

Já temos o costume de usar ranges dinâmicos, prefiram isso SEMPRE. Mesmo que vocês fixem o número da ultima linha em 100, sei lá. Nunca referenciem coluna inteira. Fica sssim:

=(SOMASE('Dados 1'!$D$8:$D$204;$D8;'Dados 1'!$F$8:$F$204)*'Dados 1'!$C$5+SOMASE('Dados 2'!$D$8:$D$204;$D8;'Dados 2'!$F$8:$F$204)*'Dados 2'!$C$5)/$C$5

Eu confesso que imaginava que o Excel respeitaria o UsedRange e, mesmo referenciando coluna inteira, se eu arrumasse o usedrange da planilha isso não afetaria nem desempenho nem memória. Eu claramente estava errado.

Para testar, abrir estes anexos em instâncias diferentes, e para cada uma, ir no gerenciador de tarefas e verificar o consumo de memória.

Este é um exemplo simples, mas já mostra o ônus de referências mal feitas quando editamos fórmulas.

O tamanho dos arquivos é o mesmo, mas o consumo de memória é bem maior.

Fica a dica.
*(arquivos Indisponiveis)

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 17/06/2013 12:32 pm