我的电子表格上有一个数字,它是列表中许多不同数字的组合。
例如:
列表包含: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
和<= 1
和int
所以我们只有 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/