Excel:查找添加到给定总数的数字子集?


Answers:


25

求解器加载项*是可能的。以下步骤在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. 如果系统提示您当前计算机上尚未安装规划求解加载项,请单击“是”进行安装。

1
在Excel 2013中,您需要从选项菜单中取消选中“忽略整数约束”。否则,您将获得0和1的非INT值
Omar Shahine

1
为了使其正常工作:1.单元格C1中的公式应为sumPRODUCT(而不仅仅是sum)2.列B中的单元格中的所有输入都应为零。

谢谢!对我来说,旧步骤仍然有效,但是我更喜欢sumproduct,因为它不依赖数组公式功能。
内特·帕森斯

无论如何找到所有的组合...虽然有一个解决方案找到的解决方案..如何找到其他解决方案???我的数组在这里:v = [1100,1105,11830,14790,2325,2455,2555,2935,3050,3150,3185,3370,3475,350,3530,3590,3680,3745,885,9624] sum = 43029 ... solution1 = [350,1100,2325,2455,2555,2935,3150,3745,9624,14790],solution2 = [350,885,1100,1105,2325,2455,2555,3530,3590,3680 ,9624,11830]
ihightower15年

2

有一个低成本的Excel加载项SumMatch,它将突出显示总计为目标总和的数字子集。

在此处输入图片说明


1
您好AIsoft,很好的发现。也许下次您可以添加更多信息。
nixda

@pnuts我犯错了吗?我不明白您
所说的

@pnuts好的,这很重要。
nixda 2012年

6
请注意:30澳元= 30澳大利亚元。它不是对具有固定列的Excel单元格[AUD30]的引用。...:D
nixda

1
价格标签是一个缺点,缺乏明确的说明也是如此。确实是产品网站上超过1句话+ 1张图片的任何内容。
Nate Parsons
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.