Excel:查找与给定总数相加的数字子集?

Nat*_*ons 10 microsoft-office microsoft-excel-2007 microsoft-excel

我有一列数字(假设它是 A1:A100),我需要找到它们的一个子集,总和达到一定的总数。

Nat*_*ons 25

使用 Solver 加载项*是可能的。以下步骤在 Excel 2007 和 2010 中对我有用。

  1. 指定一个单元格来保存结果(本例中为 C1) - 这是目标单元格,以及 excel 可用于临时工作的列(本例中为 B1:B100)
  2. 在目标单元格中​​,输入公式“=SUMPRODUCT(A1:A100,B1:B100)”(无引号)。这将计算 A1*B1+A2*B2+...等的总和
  3. 选择打开求解器(数据选项卡,分析组)
  4. 目标单元格应该很明显(本例中为 $C$1)
  5. 对于“等于:”选择“值:”并输入所需的值
  6. 在“通过更改单元格”中输入“$B$1:$B$100”(没有引号,可能需要自己将这些值初始化为 0)
  7. 向可更改的单元格添加约束。在下拉菜单中,选择“bin”(二进制)。这将这些单元格的值限制为 0(从总和中删除相应的 A 单元格)或 1(将相应的 A 单元格添加到总和中)。
  8. 单击“解决”并等待。属于您要查找的子集的数字将在 B 列中显示为 1

例子


如果求解器需要很长时间,您可以通过删除显然不起作用的行来帮助它(总计以美元为单位,只有一行具有非零美分)


奖励:您可以通过向这些单元格添加条件格式,让 excel 自动突出显示您要查找的单元格。选择要设置格式的所有单元格,然后从(主页选项卡)>>(样式组)>>条件格式设置>>新规则中选择“使用公式确定要设置格式的单元格”。在公式中,输入 '=$B1=1'(无引号),如果 B 列中的相应行为 1,则计算结果为 true。对于格式,您可以添加任何您想要的内容(粗体、斜体、绿色填充、等等)。

找到重要行的另一种简单方法是对列 B Z->A 进行排序,所有 1 都会排在最前面。


*求解器插件可以通过这些步骤安装

  1. 单击 Microsoft Office 按钮,然后单击 Excel 选项。
  2. 单击加载项,然后在管理框中,选择 Excel 加载项。
  3. 单击“前往”。
  4. 在可用加载项框中,选中规划求解加载项复选框,然后单击确定。(如果“可用的加载项”框中未列出规划求解加载项,请单击“浏览”以找到加载项。)
  5. 如果系统提示您计算机上当前未安装 Solver Add-in,请单击“是”进行安装。