Notifications
Clear all

Soma(Se... Matricial via VB

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

Tenho uma planilha que realiza o calculo de soma baseado em tabela de dados obedecendo alguns "SEs".
A tabela com os dados originais tem suas colunas nomeadas, ou seja cada coluna tem nome definido então a função ficou mais ou menos assim:
{=SOMA(SE(REF=mes;SE(TIP=$A13;SE(SIGDEP=$B13;SE(OBRA="OBRA";SE(MOP=0;SE(mot>0;INDIRETO(C$3))))))))}
Coloquei a tabela exemplo em anexo com o calculo.

A questão é a seguinte: A tabela dados original possui cerca 300 mil linhas e as condições de filtro podem variar de jan/2016 a dez/2020 e possui 7 tipos de filtro numéricos, no exemplo mandei com dois, desta forma a planilha fica muito pessada e inviavel de se trabalhar com ele em determinados PCs aqui da empresa. Gostaria de criar estes cálculos via VB para melhor a performance.

Agradeço a ajuda.

"Compartilhar conhecimentos é uma forma de alcançar a imortalidade." - Dalai Lama
"Aquele que pergunta é um tolo por cinco minutos, mas aquele que não pergunta permanece um tolo para sempre." - Provérbio Chines

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

 
Postado : 01/06/2017 6:49 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Cara, eu quero te ajudar...
O problema parece mais simples do que vc planejou, projetou... e digo mais, acho que VB vai atrapalhar mais que ajudar....

Esse indireto tb não fez sentido pra mim...

Quero entender uma coisa, vc está somando os dados, pq matricial se dá pra usar SOMASES() ou até mesmo, SOMARPRODUTO()... ?? as multiplas condições é tranquilo !

em tempo, os nomes é melhor se forem dinamicos, com DESLOC()!

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

 
Postado : 01/06/2017 10:25 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

fernando.fernandes

Boa Tarde, primeiramente obrigado pela ajuda. Realmente não tinha pensado no "SOMASES()", refiz a formula usando o "SOMASES()" e realmente ficou mais leve. Eu nunca usei o "SOMAPRODUTO()" então não me arisquei nele, sera que melhora a performance em relação ao SOMASES()?

Em relação ao "INDIRETO(), usei ele pra facilitar o deslocamento da formula, já que ele direciona pro cabeçalho e o indireto faz com que seja direcionado ao intervalo da soma, tambem posso simplismente substituir pelo intervalo na planilha de dados.

Não entendi como usar e onde aplicar o DESLOC().

Minha função ficou mais ou menos assim:

=SE(FILTRO2="Relação MOP/MOT (sem incorporação/doação)";SOMASES(MOP;REF;mes;TIP;$C5;OBRA;"OBRA");SE(FILTRO2="Relação MOP/MOT";SOMASES(MOP;REF;mes;TIP;$C5);"SELECIONE O FILTRO DESEJADO"))

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

 
Postado : 01/06/2017 11:21 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Entendi... o indireto agora fez sentido. Não se preocupe com o somarproduto()... nao vai acelerar...
o desloc() vc abriu o link que enviei ? ali tem a explicação passo a passo

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

 
Postado : 01/06/2017 1:00 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Muito obrigado, resolveu aqui!!!!

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

 
Postado : 06/06/2017 6:55 am