根据排名分配出货量(excel 基础解决方案)
Allocation of shipments based on ranking (excel based solution)
我有一些商店清单。我必须根据他们的排名分配出货量。分配应该以这样的方式进行,即每个商店不应少于 25 批货和多于 100 批货。实际问题解释如下。
Total SHipments=150
Shop Id A B C D E
Allocation (%) 30% 28% 25% 10% 7%
Min. 25 25 25 25 25
Max. 100 100 100 100 100
Actual Allocation %*150
=45 42 37 15 11
My Requirement 45(>25) 42(>25) 37(>25) 25(<25) 1(<25)
所以我的要求是基于排名,excel 应该实际分配给排名靠前的人(25 到 100 之间),随着排名下降,它应该满足更好的排名和将其设置为 25,然后分配 rest.I 我想我已经把问题说清楚了,但如果仍然存在歧义,请告诉我。我是这个社区的新手。如果我不能以正确的方式post提问,请原谅我。
要根据以下屏幕截图中显示的 table 中的信息获得所需的结果,请使用以下公式:
=INT(MIN(MAX($C*B,B),B))
将上述公式放在B16单元格中。 INT 被用作 37.5 的结果是 37。
在单元格C16中放置以下公式,并根据需要将其复制到右侧。这是基于从左到右降序排列的分配:
=IF(SUM($B:B)+INT(MIN(MAX($C*C,C),C))<=$C,INT(MIN(MAX($C*C,C),C)),$C-SUM($B:B))
max函数用于return最小值。当您的公式 return 的结果低于最小值时 max 函数 return 的最小值。当公式的结果超过最大允许值时,MIN 函数会执行相同的操作。它将 return 最大允许值,因为它是两个数字中的最小值。
更新:排名乱序
当他们是平局并且总需求超过可用出货量时,这不起作用
我用了你的 table 并添加了一个帮助行来确定排名第 6 行。我使用以下公式得出排名
=RANK(B5,$B:$F)
用这种方法,有可能有领带。您可以研究如何得出具有领带的独特排名。此解决方案的其余部分将假设排名没有关系。
在第 11 行中,每个商店的“需求”是根据最大和最小约束计算的,并向下舍入到最接近的整数。下面的公式放在B11,复制右边:
=ROUNDDOWN((MAX(MIN(B5*$C,B9),B7)),0)
在第13行中,实际发货或“供应”的数量由B13中的以下公式确定并复制到右侧。
=IF(SUMPRODUCT(($B:$F<=B6)*$B:$F)<=$C,B11,MAX($C-SUMPRODUCT(($B:$F<=(B6-1))*$B:$F),0))
仅供参考 - SUMPRODUCT 在其中执行类似数组的计算。因此,请避免使用完整的 column/row 引用,例如 A:A,而是减少数据范围或更接近数据的范围,以避免大量过度计算,这可能会使您的系统陷入困境。当公式在多个单元格中重复时尤其如此。
我有一些商店清单。我必须根据他们的排名分配出货量。分配应该以这样的方式进行,即每个商店不应少于 25 批货和多于 100 批货。实际问题解释如下。
Total SHipments=150
Shop Id A B C D E
Allocation (%) 30% 28% 25% 10% 7%
Min. 25 25 25 25 25
Max. 100 100 100 100 100
Actual Allocation %*150
=45 42 37 15 11
My Requirement 45(>25) 42(>25) 37(>25) 25(<25) 1(<25)
所以我的要求是基于排名,excel 应该实际分配给排名靠前的人(25 到 100 之间),随着排名下降,它应该满足更好的排名和将其设置为 25,然后分配 rest.I 我想我已经把问题说清楚了,但如果仍然存在歧义,请告诉我。我是这个社区的新手。如果我不能以正确的方式post提问,请原谅我。
要根据以下屏幕截图中显示的 table 中的信息获得所需的结果,请使用以下公式:
=INT(MIN(MAX($C*B,B),B))
将上述公式放在B16单元格中。 INT 被用作 37.5 的结果是 37。
在单元格C16中放置以下公式,并根据需要将其复制到右侧。这是基于从左到右降序排列的分配:
=IF(SUM($B:B)+INT(MIN(MAX($C*C,C),C))<=$C,INT(MIN(MAX($C*C,C),C)),$C-SUM($B:B))
max函数用于return最小值。当您的公式 return 的结果低于最小值时 max 函数 return 的最小值。当公式的结果超过最大允许值时,MIN 函数会执行相同的操作。它将 return 最大允许值,因为它是两个数字中的最小值。
更新:排名乱序
当他们是平局并且总需求超过可用出货量时,这不起作用
我用了你的 table 并添加了一个帮助行来确定排名第 6 行。我使用以下公式得出排名
=RANK(B5,$B:$F)
用这种方法,有可能有领带。您可以研究如何得出具有领带的独特排名。此解决方案的其余部分将假设排名没有关系。
在第 11 行中,每个商店的“需求”是根据最大和最小约束计算的,并向下舍入到最接近的整数。下面的公式放在B11,复制右边:
=ROUNDDOWN((MAX(MIN(B5*$C,B9),B7)),0)
在第13行中,实际发货或“供应”的数量由B13中的以下公式确定并复制到右侧。
=IF(SUMPRODUCT(($B:$F<=B6)*$B:$F)<=$C,B11,MAX($C-SUMPRODUCT(($B:$F<=(B6-1))*$B:$F),0))
仅供参考 - SUMPRODUCT 在其中执行类似数组的计算。因此,请避免使用完整的 column/row 引用,例如 A:A,而是减少数据范围或更接近数据的范围,以避免大量过度计算,这可能会使您的系统陷入困境。当公式在多个单元格中重复时尤其如此。