Notifications
Clear all

Rateio de Prods para Lojas - Desafiador

19 Posts
3 Usuários
0 Reactions
3,306 Visualizações
(@mgrifo)
Posts: 26
Eminent Member
Topic starter
 

Prezados,
Tenho duas tabelas/plan distintas: uma com o total de vendas de cada produto (que não indica qual loja vendeu) e outra com o total de vendas de cada loja (que não menciona quais produtos foram vendidos), conforme modelos a seguir:

Descricao Qtde %
Prod 1 6 0,03%
Prod 2 291 1,40%
Prod 3 44 0,21%
Prod 4 80 0,38%
Prod 5 335 1,61%
Prod 6 80 0,38%
Prod 7 3.000 14,42%
Prod 8 7 0,03%
Prod 9 615 2,96%
Prod 10 44 0,21%
Prod 11 5 0,02%
Prod 12 115 0,55%
Prod 13 122 0,59%
Prod 14 298 1,43%
Prod 15 10 0,05%
Prod 16 94 0,45%
Prod 17 26 0,12%
Prod 18 217 1,04%
Prod 19 153 0,74%
Prod 20 13.095 62,93%
Prod 21 665 3,20%
Prod 22 83 0,40%
Prod 23 79 0,38%
Prod 24 555 2,67%
Prod 25 110 0,53%
Prod 26 35 0,17%
Prod 27 643 3,09%
Prod 28 1 0,00%
Total 20.808 100,00%

Loja 1 1.600 7,7%
Loja 2 2.502 12,0%
Loja 3 688 3,3%
Loja 4 4.919 23,6%
Loja 5 2.212 10,6%
Loja 6 3.004 14,4%
Loja 7 2.302 11,1%
Loja 8 2.279 11,0%
Loja 9 1.302 6,3%
Total 20.808,00 100,0%

Preciso ratear, ou seja, distribuir os totais por produto para todas as lojas, pois não tenho, mas preciso, estimar a qtde de produtos vendidos por loja.

Minha ideia está sendo tirar o percentual da participação de venda cada loja sobre o total e o percentual de participação nas vendas de cada produto nas vendas totais e ratear para cada loja a quantidade de cada produto. É lógico que não refletirá a realidade mas como não tenho melhor informação, o melhor que pode ser feito é uma estimativa e já atende. Para tanto preciso criar um código VBA, pois é uma tarefa frequente.
Inicialmente fiz como teste numa planilha uma matriz com os dados que tenho das tabelas acima, aplicando fórmulas do Excel, como seria a lógica de rateio, . . .

Onde as colunas que calculam os %, os totais de linhas e de colunas e as que verificam se o total rateado está maior ou menor para checar os totais rateados com os totais originais
A partir da célula G5 ate a célula O32 coloquei a fórmula: =SE(OU(SOMA($F5:F5)>=$D5;SOMA(G$4:G4)>=G$2);0;SE(ARRED(G$2*$E5;0)<=0;1;SE(OU(SOMA($F5:F5)+ARRED(G$2*$E5;0)>$D5;SOMA(G$4:G4)+ARRED(G$2*$E5;0)>G$2);MÍNIMO(G$2-SOMA(G$4:G4);$D5-SOMA($F5:F5));ARRED(G$2*$E5;0))))
O total distribuído nunca pode ser diferente do total original de cada loja, tampouco diferente do total de produtos e usei a função ARRED(), para retornar inteiros
O problema é que como a quantidade de produtos rateados para cada loja tem que ser um nro inteiro, o produto do % de cada loja vezes o total de produtos tem que ser arredondado, com isto em alguns casos não estou conseguindo atingir no rateio o total exato de produtos para algumas lojas e produtos, conforme indicado nas células c/ o texto" menor". Além disso quando a qtde do produto a ratear ou o % de participação de uma loja sobre o total é muito pequeno corre-se o risco de se ter zero unidades rateadas.
Preciso encontrar e transformar a lógica da fórmula correta num código VBA, pois o produto final terá que ser uma nova tabela com os seguintes campos:
[Data ] [Loja] [ Produto] [Qtde ]
Não sei se fui claro o suficiente mas qualquer coisa posso mandar a planilha original para quem puder me ajudar.
Grato e no aguardo de alguem que possa me ajudar

 
Postado : 11/12/2013 8:05 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

mgrifo,

Interessante seu post porque finalmente parei pra dar uma olhada mais a fundo neste assunto.

Como não temos controle sobre as decimais resultantes dos cálculos, o melhor caminho seria “acomodar” simultaneamente a(s) diferença(s) na linha/coluna mais relevante. O problema (pelo menos para mim) é justamente este simultaneamente porque não vejo como fazer isso através de 1 única fórmula.

Sendo assim, separei o processo em 2 etapas: zerar separadamente linhas e colunas.

No anexo tem o que vc pediu (distribuição, zerar as diferenças, macro para copiar e colar valores) além de simulação com aleatórios para testar.

Selecione o mês em vermelho e acione a seta para a macro.

Acho que funciona. Dá uma olhada e me fala.

Abs,

A solução (post) recomendada pelo Reinaldo não está preparada para números grandes.
No caso de haver igualdade entre os dois maiores números de linha (produto) ou coluna (loja), a fórmula gera referência circular (porque há 2 máximos).

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

 
Postado : 17/12/2013 2:09 am
(@mgrifo)
Posts: 26
Eminent Member
Topic starter
 

GTSALIKs,
estou testando teu codigo, porem ja percebi que vc usou um artificio que nao esta funcionando na versao real porque tanto loja quanto produtos nao tem nros, como vc usou a contagem de lojas pelo sufixo do modelo quando se troca o nro por uma letra por exemplo Prod A, o distribuição percentual jah nao funciona. To tentando consertar isto para poder expandir.

Mandrix
Não entendi quais as colunas e linhas que tenho que usar se quiser substituir os dados do exmplo na versão real. como seria isto
Mais uma vez grato a todos pela ajuda e atenção

 
Postado : 17/12/2013 7:29 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

mgrifo,

eu estava em dúvida se as lojas e produtos teriam nomes, ou seriam como vc colocou. Porém, eu coloquei numeros pra fazer os laços de repetiçao (Do Loop e For Next).

Uma alternativa seria vc carregar uma matriz no início da funçao, veja esse exemplo:

Sub teste()

Dim matriz(3) As String

matriz(1) = "Loja Pague Pouco"
matriz(2) = "loja Leve 2 por 3"
matriz(3) = "tudo baratinho baratinho"

MsgBox (matriz(1))
End Sub

Assim vc pode "converter" os números para nomes. Ou seja, onde tenho um contador "i" por exemplo, ficaria

Matriz(i)

Outra coisa: estou sem tempo por essa semana, mas acho q seria interessante limitar a macro a rodar somente para o mes atual (vai ganhar muito em tempo, e se precisar, basta mandar rodar novamente com o novo mes, basta inserir uma input box, algo +/- assim:

Sub teste2()

Dim Mes As Integer

Mes = InputBox("Digite o mes, de 1 a 12")

MsgBox Mes

End Sub

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 17/12/2013 8:14 pm
(@mgrifo)
Posts: 26
Eminent Member
Topic starter
 

Gtsalikis
Vlw. To implementando as funcionalidades que vc e a galera do forum propuseram, mas confesso que é um "baita cascalho". rsrsrsrsrsrs
Assim que conseguir algum resultado vou postando aki
Grato

 
Postado : 18/12/2013 7:18 pm
Página 2 / 2