找到范围中的前n个值,同时将值的总和保持在x值下的另一个范围内

时间:2013-11-21 22:54:21

标签: excel excel-formula pivot-table excel-2013

我想完成以下任务。有三列数据。 A栏代表价格,其中总和需要保持在100,000美元以下。 B列代表一个值。 C列表示与A列和A列相关联的名称。乙

在> 100行数据中,我需要在B列中找到最高的8个值,​​同时保持A列中的价格总和低于100,000美元。然后从C列返回8个名称。

这可以完成吗?

编辑:

我尝试了解决方案,没有运气。 200行看起来是最大w /求解器,这就是我现在正在使用的。以下是我采取的步骤:

  1. 创建一个名为rank RANK的列(B2,$ B $ 2:$ B $ 200)(使用D列 - 这是什么目的?)

  2. 创建一个名为flag的列,只放入零(使用E列)

  3. 创建3个总单元格total_price(= SUM(A2:A200)),total_value(= SUM(B2:B200))和total_flag(=(E2:E200))

  4. 使用求解器最小化total_value(不应该最大化?)

  5. 添加约束-Total_price< = 100000 -Total_flag = 8 -Flag cells is binary

  6. 使用Simplex LP,它只是更改前8个值的标志。但是,前8个值的总价格> 100,000美元($ 140k)。我已经尝试更改求解器参数中的一些选项以及使用不同的求解方法无济于事。我想发布参数设置的图像,但没有足够的“声誉”。

    编辑#2:

    前5行看起来像这样,价格下降到桌子底部〜$ 6k。

    Price      Value       Name          Rank   Flag
    $22,538 42.81905675 Blow, Joe     1      0
    $22,427 37.36240932 Doe, Jane     2      0
    $17,158 34.12127693 Hall, Cliff   3      0
    $16,625 33.97654031 Povich, John  4      0
    $15,631 33.58212402 Cow, Holy     5      0
    

1 个答案:

答案 0 :(得分:0)

我会给你解决方案解决方案作为起点。它涉及创建一些额外的列和总单元格。注意解决方案的可处理单元数量有限,但无论如何都可以使用100。

创建名为rank RANK(B2,$B$2:$B$100)

的列

创建一个名为flag的列,只放入零

创建3个总单元格total_price,total_value和total_flag

使用求解器最小化total_value

添加约束 -Total_price< = 100000 -Total_flag = 8 - 标记单元格是二进制

这将标记您想要的行,您可以随意获取名称。