Notifications
Clear all

SOMARPRODUTO - VBA

7 Posts
4 Usuários
0 Reactions
2,735 Visualizações
(@victor-marassi)
Posts: 81
Trusted Member
Topic starter
 

Boa tarde,

Estou precisando de uma ajuda para transformar todas as fórmulas SOMARPRODUTO em algum código VBA. A planilha que estou utilizando é o caixa de uma empresa que a medida que eu lanço um pedido em outra planilha e preencho o boleto com data já aparecerá no fluxo de caixa a data e os valores corretos do boleto. O problema é que preciso de muitas células iniciando de maio de 2012 até dezembro de 2013 (1ªcoluna portando os clientes/fornecedores e 1ªlinha contendo cada dia do ano). Portanto a planilha ficou pesada demais para realizar os cálculos.
Minha pergunta é primeiramente se um código em VBA otimizará o sistema, se não, qual a solução que seria viável?

Desde já agradeço.

Att.

 
Postado : 05/06/2012 10:52 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde Victor

Seja bem vindo ao fórum!

Veja o exemplo de como fazer a fórmula SOMARPRODUTO com VBA

Sub SomarColuna()
[E2].FormulaLocal = "=SOMARPRODUTO((OFICIO!$N$20:$N$440=""PAGO"")*(OFICIO!$F$20:$F$440=""OK"")*(OFICIO!$C$20:$C$440=C22))"
[E2].AutoFill [E2:E127]
End Sub

Como eu ainda sou iniciante em VBA eu não sei te informar ao certo se trará uma redução significativa no tamanho do arquivo.

Se a informação foi útil, clique na mãozinha que fica ao lado da ferramenta Citar.

Um abraço.

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

 
Postado : 05/06/2012 11:09 am
(@victor-marassi)
Posts: 81
Trusted Member
Topic starter
 

Boa tarde Patropi,

Ai que tá, o arquivo tem 3,5mb e antes de eu ter inserido as fórmulas ele tinha por volta de 3,2mb. Não fez muita diferença no tamanho, mas ao mesmo tempo, os cálculos estão demorando muito.
Vou utilizar sua dica e depois dou um feedback.

Muito obrigado!

 
Postado : 05/06/2012 11:15 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Já que vai ter que usar VBA, porque não por o VBA para fazer os cálculos ao invés do excel (formulas por VBA, para o excel), ou então dentro dessa rotina, porque não colar especial valores...
Se as dicas não o agradar em tão tente ao menos

Sub SomarColuna()
Application.ScreenUpdating = 0
Application.EnableEvents = 0
[E2].FormulaLocal = "=SOMARPRODUTO((OFICIO!$N$20:$N$440=""PAGO"")*(OFICIO!$F$20:$F$440=""OK"")*(OFICIO!$C$20:$C$440=C22))"
[E2].AutoFill [E2:E127]
Application.EnableEvents = 1
Application.ScreenUpdating = 1
End Sub

Creio que talvez melhore o desempenho

Att

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

 
Postado : 05/06/2012 11:35 am
(@victor-marassi)
Posts: 81
Trusted Member
Topic starter
 

Bom pessoal, fiz da seguinte forma:
Sub SomarColuna()
[e24].FormulaLocal = "=SOMARPRODUTO(('boletos em aberto'!$a$4:$a$2000=$b24)*('boletos em aberto'!$i$4:$i$2000=e$4)*('boletos em aberto'!$u$4:$u$2000))"
[e24].AutoFill [e24]
Range("E24:e45").Select
Selection.AutoFill Destination:=Range("E24:yt45"), Type:=xlFillDefault
Range("e24:yt45").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

*Resolvi utilizar o colar especial no final, pois realmente deixando o VBA fazendo os cálculos e liberando as fórmulas do EXCEL a planilha ficou bem mais leve, funcional.

Muito obrigado à todos.

 
Postado : 05/06/2012 1:19 pm
(@ricardoazevedo)
Posts: 1
New Member
 

Bom pessoal, fiz da seguinte forma:
Sub SomarColuna()
[e24].FormulaLocal = "=SOMARPRODUTO(('boletos em aberto'!$a$4:$a$2000=$b24)*('boletos em aberto'!$i$4:$i$2000=e$4)*('boletos em aberto'!$u$4:$u$2000))"
[e24].AutoFill [e24]
Range("E24:e45").Select
Selection.AutoFill Destination:=Range("E24:yt45"), Type:=xlFillDefault
Range("e24:yt45").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

*Resolvi utilizar o colar especial no final, pois realmente deixando o VBA fazendo os cálculos e liberando as fórmulas do EXCEL a planilha ficou bem mais leve, funcional.

Muito obrigado à todos.

Prezado Vitor e a todos boa tarde.
Estou com o mesmo problema. Tabalho em um grupo com 18 filiais e tenho um banco de dados muito grande.

Preciso fazer um levantamento e utilizei SOMARPRODUTO e {SOMA(SE; SE(;))} (Matricial) porém a formula ficou muito lenta e demora quase uma hora para fazer o calculo. Minha planilha está com 11MB +/-.

Tentei fazer como você porém não tenho tanto conhecimento em VBA (na verdade muito pouco).

Seria possível uma ajuda de como proceder ?

Tenho uma ABA Base de Dados e mais 18 ABAS (uma para cada filial).

 
Postado : 27/08/2012 1:43 pm
(@gustavo)
Posts: 2
New Member
 

Boa noite,

Estou com problema semelhante. Criei uma planilha para fluxo de caixa com três abas (pagamento, recebimento e fluxo de caixa). Na aba fluxo de caixa utilizo fórmulas com somarproduto [ =SOMARPRODUTO(--((Pagamento!$J:$J="bradesco")+((Pagamento!$J:$J)=""));--(Pagamento!$O:$O=janeiro!O$19);--(Pagamento!$K:$K=janeiro!$B31);Pagamento!$G:$G) ] para trazer os dado para a aba fluxo de caixa.

Acontece que a planilha está demorando demais para calcular. Não conheço nada de VBA.

Como posso fazer para essa planilha ficar mais rápida?

Segue o link para download da planilha:
http://www.4shared.com/file/-FhMiHPqba/ ... ixa_-.html

Grato.

Gustavo.

 
Postado : 30/01/2014 8:31 pm