vba - Excel 查找数字组合的函数

标签 vba excel solver

我的电子表格上有一个数字,它是列表中许多不同数字的组合。

例如:

列表包含:100、200、250、500 和 1000
我需要解释的数字是:800

答案是 500、200、100。

我正在处理超过 1500 个货币单元格 ($xxxx.xx),这些单元格构成总计(并且并非全部都被使用,因此 SUM 毫无用处)。我需要了解哪些数字用于创建该总数(这不是公式,而是硬编码数字)。

问题:
是否有一个函数或 VBA 可以系统地组合给定范围内的数字,直到确定可以将哪些数字相加得出总数?

在开始编写暴力算法之前我想知道。

最佳答案

您可以使用SOLVER在excel中得到结果。

您可以在 ADD-INS 中激活它它应该显示在 DATA 中选项卡。

您可以这样设置电子表格:

在一栏中您有要检查的号码列表 下一列全为零 (0) 第三列是 First*Second (例如 100 * 0),因此一开始所有行都为零

比您添加第三列的摘要,它也应该为零。该数据的示例如下:

100 0   0
200 0   0
500 0   0
50  0   0
60  0   0
80  0   0
120 0   0
90  0   0
TOTAL   0

现在你运行solver表格data选项卡,您将获得必须提供参数的界面:

目标值是包含所有乘法之和的 CELL 您正在寻找精确的值(输入 800)

通过更改单元格:选择第二列中的零范围

添加三个附加限制(add按钮): 零的范围必须是 >= than 0<= 1int所以我们只有 0 和 1 作为可能的结果 (每次添加其他限制时都必须重新选择范围)

现在按solve一段时间后(取决于数据集的规模,从几秒到几分钟),它会将一些零更改为 1,指示哪些数字用于生成您的结果。

如果有很多可能的结果,它会选择他找到的一个,而不指示还有更多,但再次运行可能会产生不同的结果。

这是我得到的结果:

100 1   100
200 0   0
500 1   500
50  0   0
60  0   0
80  1   80
120 1   120
90  0   0
TOTAL   800

关于vba - Excel 查找数字组合的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28146726/

相关文章:

vba - 测试字段是否为空 ms Access

vba - 为什么此 Outlook 2007 VBA 不起作用(我试图以编程方式删除标志)?

vba - 自动分组Excel VBA

VBA查找空白单元格并插入文本

java - 如何每 30 分钟自动执行一次 vba 宏?

vba - 在模块中运行 VBA 时 Excel 挂起

excel - 将单元格值设置为电话号码格式

logic - Z3 SMT 求解器中的常数相等

R 团队花名册优化 w/lpSolve

excel - 如何从Excel中的求解器中删除所有约束?