Hi!请登陆

不要多退少补,只要刚刚好!

2021-2-2 20 2/2

有个小伙伴在群里提出了一个这样的问题,说他们要报销某笔费用,但是发票搞混了,现在只知道总价,忘记是那几张发票组成的,能不能通过Excel帮忙找出来。(练习资料可下载)

这种问题对于Excel来说,太容易了。介绍个功能给大家 -- 规划求解。

很多小伙伴可能发现自己的Excel里面没这个选项,当然,在做之前,要做一下设置。

首先打开你的开发工具菜单栏,找到Excel加载项:

点击后弹出加载项对话框:

勾选规划求解加载项后,点击确定即可。完成之后,在数据工具栏中会找到这个工具:

下面就看看怎么应用它来解决吧。

对于这种问题,先要构建一个模型,为什么?因为你得先让系统先知道这个总价800.55是怎么来的?

所以在收款金额的地方设置了一个公式:

公式:

=SUMPRODUCT(B2:B16*C2:C16)

目前C列中都是0,所以这个结果是0,最终得到的结果只要是保证有的0变成1就可以进行计算了。所以最终变化的数值应该是这些0,对于这种变化的数值,我们把它称之为变量。

选中这个输入了公式的单元格,点击“规划求解”,弹出如下对话框:

既然我们要得到的结果是800.55,那就勾选目标值,后面的空白框中输入:800.55:

接下来是通过更改可变单元格,很明显,刚才也说过,需要变化的是C列中的0值,所以可变单元格就应该是这些了。

接下来是指定一些限制条件,比如说0只能变成1,为什么?因为每个金额的发票你只有一张啊,不可能说有些发票你有好几张,另外发票的张数不可能出现小数或负数吧。

点击遵守约束后的添加按钮,弹出添加约束对话框:

设置如下:

bin这里的二进制结果只有0和1。

返回规划求解参数界面,选择求解方法:单纯线性规划,最终设置如下:

直接点击求解,系统自动进行计算,稍等几秒后,给出结果:

再来看个案例:

以前做项目,完成一阶段的时候,老板会拿出一笔钱犒劳大家,但是经常遇到这种情况,不是钱剩得太多,就是钱不够。学会了这个方法,今后就不要惧怕这个问题了。

根据必须满足的数量条件,计算得出的结果是85,意味着多余的15块要上交回去了。怎么把剩下的这15块也全部花完呢?

跟第一个案例一样,先要告诉系统怎么计算才能达到100。所以这里要先建个模。选中实际花费后的单元格,输入公式:

=SUMPRODUCT(B5:B11*D5:D11)

接下来点击规划求解,设立相应的条件,这次条件有点多,每个单元格因为有最小的数量限制,所以每个单元格都必须进行最小值的设定,而且买东西不可能是半个,所以数量上必须是整数。最终的设置如下:

点击求解,稍等片刻之后得出规划后的结果:

当然,你可以在运行一次,说不定可以得出不同的规划结果。

比如将求解方法设成:单纯线性规划,又是另外一个结果:

这两个求解方法有什么区别呢?其实我也不是特别清楚,但是可以肯定的是:选择“单纯线性规划”在运算速度上要比“非线性GRG”要快得多。

相关推荐