Notifications
Clear all

Rateio de Prods para Lojas - Desafiador

19 Posts
3 Usuários
0 Reactions
3,307 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
 

Esse é um problema praticamente insolúvel. O que vc pode (e deve) fazer é deixar as últimas linha e coluna como ajuste para o total.

Arredonde para "zero casas" na área laranja e acomode a diferença na área em preto.

Me avise,

Abs,

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

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

Mandrix,
Obrigado pelo retorno. De fato tô batendo a cabeça a varios meses e não achei uma solução.
E a sua não funciona porque no exemplo real a ultima coluna e a ultima linha ou estouram ou ficam negativas.
A sua formula proposta eu jah tinha incluído na aba prodGeral_EmUso o que minimiza o problema e restringe-o sempre a uma diferença a menor
Mas continu agradecendo qualquer proposta de solução

 
Postado : 12/12/2013 9:42 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Último conselho: Sempre que for "despejar" a diferença em alguma coluna ou linha, faça sempre na mais relevante tanto horizontalmente como verticalmente (no seu exemplo Coluna J Linha 24 - Produto 20 Loja 4).

Não tem jeito cara. O cálculo com percentual quebrado em tabelas muito grandes tem seus inconvenientes.

Vida que segue.

Abs,

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

 
Postado : 13/12/2013 12:40 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Olhando pelo post inicial, creio que dê pra fazer com VBA (talvez usando um loop pra acertar os valores).

Porém, não consegui entender a planilha... :S

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

Gilmar

 
Postado : 13/12/2013 6:32 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei se auxilia ou não, mas segue um exemplo considerando uma adaptação do discutido/disponibilizado por Mauro/Bernardo no tópico viewtopic.php? (Formula para distribuir quantidade)

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

 
Postado : 13/12/2013 10:41 am
(@mgrifo)
Posts: 26
Eminent Member
Topic starter
 

Grande Reinaldo,
Valeu pel retorno. Acho que tua idéia pode ajudar a resolver o problema, pois embora o total por Filial dê diferença ao final esta se anula no total geral.
Porém agora preciso transformar a lógica da fórmula em codigo VBA.
Esotu tentando mas não consegui converter numa SUB.
Se alguém puder ajudar, agradeço

 
Postado : 13/12/2013 12:52 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!
Você pode por as formulas via VBA, depois colar valores!

Sub FormulaNaCelula()
    i = 2
    For Each c In Range("SeuIntervalo")
        c.Value = "=SuaFormula"
        i = i + 1
    Next
End Sub

Att

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

 
Postado : 13/12/2013 12:59 pm
(@mgrifo)
Posts: 26
Eminent Member
Topic starter
 

Grande AlexandreVBA
Entendi sua sugestao, mas o problema é que o formato orginal dos dados está em 2 tabelas normalizadas. Logo obter os totais e fazer a distribuição não e uma tarefa facil. tenho que pensar em como ratear a partir delas.

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

Bom dia mgrifo,

O problema é mais de definição do que fazer, do que de codificação VBA, que neste caso acho que conseguiria até com funções.

Conforme as informações que você tem eu faria uma planilha simples aonde multiplicaria a quantidade vendida do produto pelo percentual que cada loja representou das vendas e depois arredondaria para ficar na quantidade total.

Produto 21: 665 * Loja 001: 7,7% = 46,55, arredondar para 47.

Espero ter ajudado, normalmente as soluções mais simples são as mais eficazes.

Abraço

Marcos Rieper

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

 
Postado : 14/12/2013 9:30 am
(@gtsalikis)
Posts: 2373
Noble Member
 

mgrifo,

Veja se era isso o que vc queria.

Criei uma cópia da planilha para testar: prodGeral_EmUso_GT

Nela incluí 1 coluna e 1 linha auxiliar (destacadas em preto), e o botão que chama a macro.

Se não for isso, avise.

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

Gilmar

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

GTSALIKs, Muito show! O resultado final das contas tá perfeito.
Mas como disse anteriormente, o formato original dos dados vem em duas tabelas normalilzadas (no format de BD), ou seja, uma tabela com as sequintes informações/campos: Ano, Codigo, Descricao e Qtde, ou seja, o equivalente as colunas A,B,C e D da planilha "prodGeral_EmUso_GT". E a outra tabela tem os seguintes campos: Uns, Descr_Uns e Mês e An, ou seja, o equivalente as linhas A,B, C, D e E da planilha "Uns-QtdsProd". A plan com a Matriz (prodGeral_EmUso) eu fiz para facilitar a visualização dos dados e a montagem da fórmula em Excel, enquanto achava uma solução, mas não é o formato final que preciso. Desculpe se esqueci de falar isto antes!
Só que agora não tô sabendo aplicar teu código, que por sinal tá nota dez, no formato de dados/tabela original. Preciso fazer esta adaptação porque na vida real a tabela de produtos tem mais de mil linhas e a de lojas mais de 60, por mês, podendo variar.
A idéia é ter como produto final uma tabela/lista com os seguintes campos: Ano/mes/loja/prod/qtde. Fiz um exemplo jah com os nros calculados pela tua macro na planilha "Distribuido"
Poderia dar-me uma ajuda neste sentido? No arquivo em anexo demonstro o formato original nas plans "Uns-QtdsProd" e "Qtde_Produtos". Preciso adaptar seu código para trabalhar nas listas e não na tabela Matriz. Ficaria super grato

 
Postado : 15/12/2013 4:45 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Com esse novo formato, mais a adição das variáveis de mês e ano, e sendo que a quantidade de lojas tb é variável por mês, o código fica mais longo e acho q vai demorar pra calcular essas 1000 linhas.

Em todo caso, estou no meio do caminho, vou ver se de noite eu consigo terminar.

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

Gilmar

 
Postado : 16/12/2013 12:39 am
(@mgrifo)
Posts: 26
Eminent Member
Topic starter
 

GTSALIKs
Obrigado. Aguardo ansioso qualquer sugestão

 
Postado : 16/12/2013 12:21 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

mgrifo,

estava refazendo o código, porém, com a mudança de formato, uso de 3 planilhas distintas, mais as variáveis de mês e ano, e a variação de loja e produto, acabou ficando muito burocrático e está dando estouro aqui.

Não consegui achar uma forma mais direta de fazer isso, e acabei deixando o código incompleto. Faltou a parte dos ajustes do que foi distribuído e da distribuição do último produto. (Pelo que eu fiz, dá pra fazer os outros, pois é quase um "copiar e colar").

Em todo caso, estou anexando o arquivo compactado, pois sei pouco de VBA. Os amigos que manjam podem propor uma solução mais eficiente.

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

Gilmar

 
Postado : 16/12/2013 9:28 pm
Página 1 / 2