2010-10-29 18:07:39 +0000 2010-10-29 18:07:39 +0000
10
10
Advertisement

Excel。找出一个数字的子集,加到一个给定的总数上?

Advertisement

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

Advertisement
Advertisement

答案 (2)

25
25
25
2010-10-29 18:08:04 +0000

使用Solver插件*可以实现。以下步骤在Excel 2007和2010中对我来说是可行的。

1.指定一个单元格来存放结果(本例为C1)–这是目标单元格,也是excel可以用来进行刮擦工作的一列(本例为B1:B100) 2.在目标单元格中,输入公式"=SUMPRODUCT(A1:A100,B1:B100)“。在目标单元格中,输入公式”=SUMPRODUCT(A1:A100,B1:B100)“(没有引号)。这将计算出A1/B1+A2/B2+……等之和 3. 选择打开求解器(数据选项卡,分析组) 4. 目标单元格应该是显而易见的(本例中为$C$1) 5. 对于 "Equal To: "选择 "Value of: "并输入所需的值 6. 在 "通过改变单元格 "中输入”$B$1:$B$100"(没有引号,可能需要自己将这些值初始化为0) 7. 为可以改变的单元格添加一个约束。在下拉菜单中,选择 “bin"(二进制)。这将限制这些单元格的值为0(从总和中删除相应的A单元格)或1(将相应的A单元格添加到总和中)。 8. 点击'求解'并等待。属于你要找的子集的数字在B列中会有一个1


如果求解器花了很长时间,你可以帮助它删除那些明显不行的行(总和是以美元为单位的,只有一行有非零的美分)


奖励:你可以通过给这些单元格添加条件格式,让excel自动突出显示你要找的单元格。选择所有你想要格式化的单元格,然后从(主页选项卡)/>>(样式组)/>>条件格式化/>>新规则中选择 "使用一个公式来确定哪些单元格要格式化"。在公式中,输入’=$B1=1’(没有引号),如果B列中对应的行是1,则该公式将评估为真。 对于格式,你可以添加任何你想要的东西(粗体、斜体、绿色填充等)。

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

  • *

*解算器插件可以通过以下步骤安装

1.点击Microsoft Office按钮,然后点击Excel选项。 2. 单击 "加载项",然后在 "管理 "框中,选择 "Excel加载项"。 3. 3. 单击 "Go"。 4. 在 "可用的加载项 "框中,选择 "求解器加载项 "复选框,然后单击 "确定"。(如果Solver Add-in未在Add-Ins可用框中列出,请单击浏览以找到该插件。) 5. 5. 如果提示您当前计算机上没有安装Solver插件,请单击 "是 "进行安装。

2
2
2
2012-12-30 02:41:03 +0000

有一个低成本的Excel插件SumMatch,它将高亮显示加起来达到目标总和的数字子集。

Advertisement

相关问题

6
13
10
8
7
Advertisement
Advertisement