Página 1 de 1
Distribuir valor para 3 pessoas
Enviado: 06 Jul 2021 às 10:57
por renaneemm
Boa tarde a todos do fórum!
Aprendi muito vendo exemplos e raciocínios que utilizaram aqui no fórum, então venho tirar uma dúvida que não consegui resolver há meses já.
Tenho uma coluna de valores que distribuo entre 3 clientes, e tento fazer com que no final, a soma de cada um dos 3 sejam o mais próxima possível.
VALORES 1,2,3 CLIENTE A CLIENTE B CLIENTE C
2,00 1 2,00 0,00 0,00
3,00 1 0,00 3,00 0,00
8,00 2 4,00 0,00 4,00
10,00 2 0,00 5,00 5,00
15,00 3 5,00 5,00 5,00
1,00 1 1,00 0,00 0,00
somas 12,00 13,00 14,00
Segue em anexo a planilha de um exemplo que consegui fazer com que se distribuam entre 2, porém não consigo ter nenhum raciocínio para que conte como 3 pessoas a ser distribuído.
Alguém teria uma luz para me auxiliar com isso?
Desde já, obrigado.
Re: Distribuir valor para 3 pessoas
Enviado: 06 Jul 2021 às 13:11
por Deciog
renaneemm, Boa tarde
Fiquei com muita duvida, explica com detalhe como chegou ao resultado na linha 5
Decio
Re: Distribuir valor para 3 pessoas
Enviado: 06 Jul 2021 às 15:30
por renaneemm
Boa tarde Deciog
A linha 5 seria sobre a soma?
Escrito como deixei no post saiu do alinhamento na publicação, fiz upload de um print
https://ibb.co/Y3Fyskc
mas tem a planilha em anexo caso ajude a entender
Re: Distribuir valor para 3 pessoas
Enviado: 06 Jul 2021 às 19:25
por osvaldomp
Veja se ajuda.
Em K4 e arraste para L4
=ARRED($I4/3;0)
Em M4
=I4-K4-L4
Selecione K4:M4 e arraste para baixo.
Re: Distribuir valor para 3 pessoas
Enviado: 07 Jul 2021 às 09:46
por renaneemm
Bom dia! Obrigado pelo retorno Osvaldomp.
Infelizmente a fórmula não deu certo
Segue uma imagem do resultado
Nem sempre tem a divisão para todos, este é o problema, pois depende do 1,2,3 que selecionar na coluna C:C
Re: Distribuir valor para 3 pessoas
Enviado: 07 Jul 2021 às 10:17
por osvaldomp
renaneemm escreveu: ↑07 Jul 2021 às 09:46
Segue uma imagem do resultado
É estranho pois aqui as fórmulas que passei retornam resultados diferentes dos seus. Veja na imagem abaixo e no arquivo anexado.
Nem sempre tem a divisão para todos, este é o problema, pois depende do 1,2,3 que selecionar na coluna C:C
Não entendi. Qual o significado desses valores da coluna C? Eles devem ser considerados nos cálculos da distribuição dos valores? E os valores da coluna J ?
O único critério que você informou antes foi este ~~~> "Tenho uma coluna de valores que distribuo entre 3 clientes, e tento fazer com que no final, a soma de cada um dos 3 sejam o mais próxima possível."

Re: Distribuir valor para 3 pessoas
Enviado: 08 Jul 2021 às 08:24
por renaneemm
@osvaldomp tudo bem?
Quanto ao
"É estranho pois aqui as fórmulas que passei retornam resultados diferentes dos seus. Veja na imagem abaixo e no arquivo anexado."
Acho que estamos com uma divergência na comunicação apenas, vou explicar melhor.
"Não entendi. Qual o significado desses valores da coluna C? Eles devem ser considerados nos cálculos da distribuição dos valores? E os valores da coluna J ?"
Inseri duas tabelas,
uma da B a F, que faz os cálculos para 2 clientes
uma da I a M, de exemplo que é feito a mão a distribuição como deveria ser, o ideal (sem fórmulas). Essa é apenas um exemplo
A coluna C é a entrada de decisão em quantos clientes vou distribuir (1, 2 ou 3).
Se colocar 1, não importa quem seja, o valor vai apenas pra 1.
Se colocar 2, não importa quem sejam, vai dividido para 2. O mesmo para 3...
O que importa apenas é a soma da linha 1 da coluna D,E,F estarem bem próximas.
Consegui explicar melhor para entender? Acho que havia explicado mal, me desculpe com isso.
Re: Distribuir valor para 3 pessoas
Enviado: 08 Jul 2021 às 14:14
por Foxtri
Boa tarde.
Veja se pode ser desta maneira.
Até
Foxtri
Re: Distribuir valor para 3 pessoas
Enviado: 08 Jul 2021 às 15:39
por renaneemm
@Foxtri
Muito obrigado pelo retorno.
Infelizmente não deu certo, ele distribui porém a soma final não é equilibrada (uma próxima da outra)
segue a imagem
https://ibb.co/YZ93Y0Y
as setas mostram valores que podiam ser deslocados para equilibrar essa soma final.
Re: Distribuir valor para 3 pessoas
Enviado: 10 Jul 2021 às 22:30
por osvaldomp
Olá, @renaneemm .
Veja se a solução por macro que está no arquivo anexado lhe atende.
Re: Distribuir valor para 3 pessoas
Enviado: 12 Jul 2021 às 08:24
por renaneemm
@osvaldomp muito obrigado pelo retorno e pela planilha.
Fiz uma visualização rápida e ficou 10 até então. Vou depois testar com outros valores e dou o feedback, mas desde já agradeço demais
Parabéns pelo raciocínio no vba, vi e foi bem preciso!
Re: Distribuir valor para 3 pessoas
Enviado: 12 Jul 2021 às 09:53
por renaneemm
osvaldomp escreveu: ↑10 Jul 2021 às 22:30
Olá, @renaneemm .
Veja se a solução por macro que está no arquivo anexado lhe atende.
Bom dia
@osvaldomp
Fiz testes com uns valores que costumo utilizar, a maioria deu certo (bem melhor do que eu usava inicialmente)
em alguns casos, como no da imagem, com set de 2 na J11, ele coloca o valor em apenas uma.
Vi o raciocínio no VBA mas não sei como ajustar
Mas foram 2 casos que ocorreu assim dos que testei, como mencionei, na maioria deu certo, fiquei feliz com isso e te agradeço!
Caso seja de fácil ajuste este caso, eu aceito, senão já está bom demais assim!
Obrigado
@osvaldomp
Re: Distribuir valor para 3 pessoas
Enviado: 12 Jul 2021 às 17:56
por osvaldomp
renaneemm escreveu: ↑12 Jul 2021 às 09:53
em alguns casos, como no da imagem, com set de 2 na J11, ele coloca o valor em apenas uma.
Esse "erro" (que na prática não é um erro pois o que importa é o total recebido por cada um), ocorre porque a fórmula considera somente valores inteiros na coluna I, conforme os seus exemplos anteriores, porém você introduziu valores decimais.
Para trabalhar também com valores decimais basta remover a função INT() das fórmulas. Cole uma cópia do código abaixo, que já está atualizado sem a função INT(), no lugar do existente no arquivo que postei.
#
Código: Selecionar todosSub DistribuiValores()
Dim vArr As Variant, k As Long, rng As Range, x As Long
Application.ScreenUpdating = False
[K4:M50] = "": k = 100
Set rng = Range("K4:M" & Cells(Rows.Count, 9).End(3).Row)
rng(1, 1).Resize(rng.Rows.Count) = "=IF(J4=1,CHOOSE(RANDBETWEEN(1,2),0,I4),IF(J4=2,CHOOSE(RANDBETWEEN(1,2),0,I4/2),I4/J4))"
rng(1, 2).Resize(rng.Rows.Count) = "=IF(AND(J4=1,K4>0),0,IF(J4=1,CHOOSE(RANDBETWEEN(1,2),0,I4),IF(AND(J4=2,K4=0),I4/2,IF(J4=2,CHOOSE(RANDBETWEEN(1,2),0,I4/2),I4/J4))))"
rng(1, 3).Resize(rng.Rows.Count) = "=I4-K4-L4"
For x = 1 To 1000
ActiveSheet.Calculate
If Evaluate("MAX(K2:M2)-MIN(K2:M2)") = 0 Then vArr = rng.Value: Exit For
If Evaluate("MAX(K2:M2)-MIN(K2:M2)") < k Then vArr = rng.Value: k = Evaluate("MAX(K2:M2)-MIN(K2:M2)")
Next x
Range("K4").Resize(rng.Rows.Count, 3).Value = vArr
End Sub
#
Montei a tabela aqui com os valores do seu último exemplo e a menor diferença (rodei o código acima 5 vezes) foi de 2,90, que representa um desvio de 1,9% do valor total distribuído.
Por outro lado, o código anterior retornou 1,20 como a menor diferença, ou seja, apesar do "erro" a precisão foi maior: desvio de 0,8% do valor total.
Vou tentar melhorar a precisão (é improvável que eu consiga), enquanto isso teste os dois códigos com outros valores e veja se os resultados são aceitáveis.
Re: Distribuir valor para 3 pessoas
Enviado: 13 Jul 2021 às 08:03
por renaneemm
@osvaldomp
Está excelente com este código. Ocorre apenas com um valor normalmente, apenas um vou alterar manualmente.
Agradeço demais pela prestividade e pelo raciocinio que desenvolveu para o código.

Re: Distribuir valor para 3 pessoas
Enviado: 13 Jul 2021 às 08:31
por osvaldomp
renaneemm escreveu: ↑13 Jul 2021 às 08:03
Está excelente com este código.
Se você se refere ao primeiro código, devido à função INT(), o "erro" ocorrerá sempre que o valor a ser distribuído for menor do que o número indicado de clientes, ou seja, se I < J.
... apenas um vou alterar manualmente.
Para facilitar a identificação do "erro" você pode aplicar Formatação Condicional, veja abaixo.
Formatação Condicional:
1. selecione a tabela, por exemplo I4:M20
2. menu Página Inicial | Formatação Condicional | Nova Regra | Usar uma fórmula ...
3. na caixa de fórmula cole uma cópia desta fórmula ~~~>
=$J4<>CONT.SE($K4:$M4;">0")
4. formate como desejar
Re: Distribuir valor para 3 pessoas
Enviado: 15 Jul 2021 às 10:18
por renaneemm
osvaldomp escreveu:renaneemm escreveu: ↑13 Jul 2021 às 08:03
Está excelente com este código.
Se você se refere ao primeiro código, devido à função INT(), o "erro" ocorrerá sempre que o valor a ser distribuído for menor do que o número indicado de clientes, ou seja, se I < J.
... apenas um vou alterar manualmente.
Para facilitar a identificação do "erro" você pode aplicar Formatação Condicional, veja abaixo.
Formatação Condicional:
1. selecione a tabela, por exemplo I4:M20
2. menu Página Inicial | Formatação Condicional | Nova Regra | Usar uma fórmula ...
3. na caixa de fórmula cole uma cópia desta fórmula ~~~> =$J4<>CONT.SE($K4:$M4;">0")
4. formate como desejar
Nota 10. Deu certo, poxa nem acredito que essa planilha foi resolvida
@osvaldomp muito obrigado!
Vou procurar como coloca a publicação como resolvida, ficou show!