使用Excel根据排名分配值,同时保持在约束范围内

时间:2017-01-17 12:24:40

标签: excel vba excel-formula

我正在尝试创建一个资源计算器,可以告诉我每个部分需要放多少人,具体取决于当前正在等待和工作的工作。优先考虑工作最多的部分。

Upper Limit     Allocation  Prod    Ranking
12               [to calc]   28%      1
15                           18%      2 
5                            17%      3
4                             8%      4
2                             6%      5
3                            .2%      6
4                            .2%      6 

与其他问题类似,我有一个约束,我只有很多分配。对于此示例,我们将使用38作为要分配的金额。

我使用了另一个答案中的公式:

 =MIN(A2,$E$1-SUMIF($D$2:$D$8,"<"&D2,$B$2:$B$8))

其中E1包含要分配的总数。

我对这个公式有两个问题: 1)我遇到的问题是我需要在每个部分中至少有至少1人的值。

我尝试使用max函数来设置此值,但这会导致分配的资源超过总量。 我需要使用哪个等式来说明分配的可用总额,每个基金的最低要求以及每个基金的最高限额。

2)它只返回实数整数,是否可以通过将其更改为%分布来检索更精确的结果?

UL  Alloc   Rank    Capacity    Lower Limit
2   1        15      93          1
3   1        15     
4   1        15     
6   6        8      
1   1        15     
2   1        15     
4   4        9      
2   2        7      
4   4        4      
15  15       2      
12  12      10      
12  12      1       
1   1       11      
13  13      5       
6   6       6       
5   1       15      
5   5       3       
1   1       14      
2   2       13      
3   3       12      
3   1       15      

参考:Using the Excel's Rank() function to calculate allocations based on ranking and constraints

1 个答案:

答案 0 :(得分:0)

  1. 只需减去所有方面的100并分别添加:

    =MIN(A2-100,($E$1-100*COUNTA($A$2:$A$8))-(SUMIF($D$2:$D$8,"<"&D2,$B$2:$B$8)-COUNTIF($D$2:$D$8,"<"&D2)*100))+100

  2. 返回的内容取决于您在A列和E1中的条目。您可以根据百分比分布更改A列,公式将返回相应的值。

  3. 修改

    如果您将下限阈值设置为F2,则使用此公式将约束条件设置为E2

    =MIN(A2-$F$2,($E$2-$F$2*COUNTA($A$2:$A$8))-(SUMIF($D$2:$D$8,"<"&D2,$B$2:$B$8)-COUNTIF($D$2:$D$8,"<"&D2)*$F$2))+$F$2
    

    结果如下:

    enter image description here