在下面的图片中我有这些数字。
现在我想知道哪些数字相加的结果会是 98541.03。我该如何找到答案?
答案1
您必须强行解决它:计算所有可能的 SUM 组合并找到匹配集。
如果你有否价值观,你将拥有2^N可能的解决方案。这个想法是使用二进制表示来减少所需的数学运算。假设每行分配一个整数位,例如 1001 表示值 1 和值 4 之和。所以现在,在新的工作表中,A 列中的数值从 0 到 (2^否)-1 以十进制表示。如果在 B 中添加一列=BASE(A1,2,N)
,这将给出每个可能组合要计算的总和的二进制表示。在下一列 (C) 中输入
=SUMPRODUCT(data,--MID(B1,N-ROW(data)+ROW(INDEX(data,1)),1))
在哪里数据就是说sheet1!A1:A100与源值否是=ROWS(data)
。这是一个数组公式,在 365 之前的 Excel 版本中必须使用 CTRL+SHIFT+ENTER 进行确认。它采用总和组合值并将其转换为二进制(作为零和一的文本字符串)。此字符串转换为数组{"0"; “1”; ...}使用 MID 和数组来显示文本{N; N-1; ...; 2; 1}输入变量来自数据向量的引用地址。字符串数组转换为数字--如减去,最后使用 SUMPRODUCT 来计算该组合的总和。
在 D 列中,搜索匹配的组合,并向上传播,以便它在顶行可见(假设只有一个唯一的解决方案):
=IF(C1=98541.03,B1,C2)
答案2
您可以使用 Excel“求解器”功能来为您完成此操作,但它不是公式,而是每次您想要找到总和的数字时手动运行的向导。我将在这里创建一个非常小的样本来演示,然后您只需按比例扩大范围即可。
1. 先决条件
- 您必须在 Excel 中打开求解器插件
- 您必须在某处创建辅助列。它可以隐藏在其他地方,甚至可以隐藏在工作簿内的不同工作表上。只需具有与数据列相同的行数即可。
2. 在数据或其他位置添加一列
假设这是 A1:B7:
价值 | 找到了 |
---|---|
100 | 1 |
400 | 1 |
600 | 1 |
225 | 1 |
409 | 1 |
625 | 1 |
3. 设置求解器信息
转到单元格 D1 并输入
=sumproduct(A2:A7,B2:B7)
。单元格现在将包含所有 A 值的总和。转到单元格 D2 并输入要查找的总和。假设您为此示例数据输入
809
。转到单元格 D3 并输入
=D1-D2
。此单元格是总和与所寻求目标 809 之间的差值。
4. 逻辑解释
我们将告诉求解器在 B 列的每个单元格中反复试验 1 和 0 的组合。SUMPRODUCT 将每个值与其关联的 1 或 0 相乘。因此,在这种情况下,D1 将包含所有旁边有 1 的值的总和,而忽略旁边有 0 的任何值。
因此,让解算器为您尝试 1 和 0 的所有可能组合。
5. 运行求解器
- 设置
objective
为D3。 - 设置
To:
为Value OF:
0
- 设置
By Changing Variable Cells
为$A$2:$B$7
我的样本数据——根据您的情况进行调整 - 添加
Subject to the Constraints
条目:$A$2:$B$7
,并将中间字段设为bin
。约束字段应为binary
。 - 点击
Solve
- 如果找到匹配的组合,请选择
Keep Solver Solution
并点击OK
- A 列中的值将保持不变。只有达到目标的值才会在 B 列中显示为 1,其他所有值都将显示为 0。
六,结论 第一次设置需要一分钟,之后您将能够在几秒钟内检查任何总和。将新的所需总和放在 D2 中并运行解算器。