Notifications
Clear all

Média Ponderada Critérios VBA

14 Posts
3 Usuários
0 Reactions
2,915 Visualizações
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Boa tarde pessoal,

Estou tentando calcular a média ponderada com alguns critérios (período, loja e produto) do arquivo Dados e para cada média de cada produto de cada loja em determinado período, eu queria colar em outra Pasta de Trabalho (Relatório) nas planilhas dos respectivos produtos.
O problema que o código que estou escrevendo, não está calculando com base nesses critérios (retorna 0,00), se alguém puder me dizer onde estou errando (sou iniciante em VBA), fico agradecido.
Detalhe, eu faço isso via fórmula, o problema é que são arquivos grandes (600.000 linhas) e tem ficado demorado demais.
Seguem os arquivos para melhor entendimento.

Grato pela atenção.

 
Postado : 21/03/2017 11:16 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Olá Squat, tudo bem...

Me dê um exemplo dessa "média ponderada" que você precisa.
Só pra eu entender onde devemos chegar.

At;
Danilo.

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

 
Postado : 21/03/2017 2:58 pm
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Boa noite Danilo,

Então, por exemplo:
Para produto "101" da loja "A" no mês de janeiro/17 a média ponderada deve ser o somatório da (cada quantidade x cada preço unitário) / somatório da quantidade.
Na pasta Relatório o resultado para o produto "101" em jan/17 deveria ser igual a 5,52 e em fev/17 deveria ser igual a 6,00
Estou tentando fazer isso para cada produto (101,102,103, 104 e 105) de cada loja ( A, B, C, D e E) para cada mês/ano.
E calcular a média ponderada para cada produto incluindo todas as lojas juntas.
E colar cada resultado na pasta Relatório na planilha de cada produto.
Eu não sei onde estou errando, se é na declaração das variáveis ou nas condições de cálculo.
Sou iniciante em VBA.

Grato pela atenção.

 
Postado : 21/03/2017 4:02 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite Squat,

Não entendi bem a média, no caso:
[(13*6)+(12*5)]/3 = 46, e não 5,52 (?)

att,

 
Postado : 21/03/2017 4:39 pm
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Boa noite Bruno,

Desculpa a demora,minha net tá com problema.

Então,a média para o produto "101" da loja "A" em jan/17 é:

((13 * 6) + (12 * 5)) / (13 + 12) que será igual a 5,52

Estou tentando fazer para cada produto por loja por mês/ano.

E fazer para cada produto com todas as lojas juntas por mês/ano.

Grato pela atenção.

 
Postado : 21/03/2017 4:58 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde Squat,

Vi agora, fiz uma conta no Excel e coloquei tudo errado aqui hahah.

Como você tem muitos linhas (+600k), montei um código (módulo1, módulo2 e módulo3) que filtrar valores, calcula e depois copia os resultados para outra planilha.
Não sei se da forma que fiz vai ser mais rápido do que você está fazendo atualmente, por isso em cada módulo coloquei um Msgbox para informar quanto tempo demorou para rodar aquela parte do código.

Não montei a rotina para montar o relatório ainda.

Teste e dê retorno.

att,

 
Postado : 23/03/2017 10:39 am
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Boa noite Bruno,

Obrigado pela atenção.

Baixei os arquivos, vou testar e te retorno.

Grato.

 
Postado : 23/03/2017 3:47 pm
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Boa noite Bruno,

Os cálculos das médias ficaram perfeitos (show de bola)!

Então, eu também tenho que calcular a média ponderada por produto considerando todas as empresas, tomei a liberdade de incluir algumas linhas:

No módulo 1:
Range("I1").Value = "Média"

WsDados.Columns("A:A").Copy Sheets("Auxiliar").Range("F1")
WsDados.Columns("C:C").Copy Sheets("Auxiliar").Range("G1")
WsDados.Columns("G:G").Copy Sheets("Auxiliar").Range("H1")

ActiveSheet.Range("$F$1:$H$" & Nlin).RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYes

No módulo 3:
Range("A1:I" & Nlin).Copy 'delimitei até a coluna "I"

Inseri um 4º módulo, igual ao módulo 2 e só alterei essas linhas:

Soma = Application.WorksheetFunction.SumIfs( _
WsDados.Range("D:D"), WsDados.Range("C:C"), Range("C" & i), WsDados.Range("A:A"), Range("A" & i)) - Aqui deixei como critério somente a coluna produto e data (só que está somando errado, não sei por que, pois os intervalos, critérios estão corretos)

Range("E" & i).FormulaR1C1 = _
"=SUMPRODUCT(Dados!C[1];--(Dados!C[-2]=LC[2]);--(Dados!C[-4]=LC[1]))" - Aqui inseri essa fórmula para calcular a média ponderada por produto incluindo todas as lojas (só que aqui a macro para e dá erro), não faço ideia como, pois na célula a fórmula funciona direito.

Cells(i, 9) = CDbl(Range("E" & i)) / CDbl(Soma) - Aqui mudei a coluna para o resultado ficar na coluna "I". - Aqui ok.

Quando eu desabilito a linha da Somases e da Somarproduto (no módulo 4), o código roda , faz cálculo das médias por loja/produto/data e cola lá na pasta Relatório inclusive as colunas para o cálculo da média considerando todas as lojas, somente o cálculo que não está sendo feito.

No final do módulo 2 inserir um Call MediaTL (chamar o módulo 4).

Não tenho ideia onde estou errando.

Fico muito grato pela sua ajuda, para mim está sendo um aprendizado.

Seguem os arquivos.

 
Postado : 24/03/2017 3:26 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite Squat,

Esqueci de colocar o cálculo considerando todas as empresas. No módulo4 você copio grande parte do módulo2, mas não fez todos os ajuste das funções para o cálculo ficar correto.

Segue em anexo os ajuste que fiz.

att,

 
Postado : 24/03/2017 4:33 pm
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Bom dia Bruno,

Ficou ótimo. Esse código vai ser muito útil, sempre tenho que fazer esses cálculos e automatizado ficou show.

Grato pela atenção.

 
Postado : 25/03/2017 8:20 am
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde Squat,

Você não pretende automatizar o relatório?

OBS: Se o tópico já resolveu seu problema, não esqueça de marcar como resolvido.

Att,

 
Postado : 26/03/2017 9:12 am
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Boa tarde Bruno,

Desculpa a demora em responder.

Pretendo automatizar sim.

Então, inclui mais um módulo (5) e conseguir por os dados na planilha Relatório, só que ainda tenho uns problemas:

1) as fórmulas coladas parecem que estão congeladas;
2) seria possível fazer para as planilhas de cada produto de uma vez só?;
3) no final transformar as fórmulas em valores.

Seguem os arquivos versão 04.

Mais uma vez grato pela sua atenção.

Obrigado mesmo.

 
Postado : 27/03/2017 9:34 am
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite Squat,

O que pode ter acontecido com as formulas é o cálculo automático estar desabilitado, vá em Fórmulas -> Opções de Cálculos -> Automático.

Para montar os relatórios eu coloquei o código dentro do arquivo 'Relatorio', o código está no módulo1 e módulo2. Basicamente você roda o código do arquivo 'Dados' e depois vai no 'Relatorio' e roda o código nele. Fiz isso para que o processo fique separado, facilitando a correção de problemas.

A forma que montei a rotina de repetição está mais complicada do que o recomendável, então se tiver alguma dúvida é só perguntar.

Teste e dê retorno.

att,

 
Postado : 29/03/2017 8:20 pm
(@squat)
Posts: 43
Eminent Member
Topic starter
 

Blz Bruno,

Ficou ótimo!!

Vou estudar o código e procurar entender a lógica dele.

Na verdade tenho que comprar um livro, pois estou procurando aprender meio que de forma apressada rsrs.

Mais uma vez, muito obrigado pela ajuda e disponibilidade de seu tempo.

Vou marcar como resolvido.

 
Postado : 30/03/2017 8:44 am