我们现在有很多发票金额,如下是模拟的数据,这里有10张发票
然后总金额是固定的,是由以下的发票金额凑起来正好的数值
也不确定具体是几张发票凑起来的
现在需要快速的将它们找出来,正好凑好总金额
遇到这种凑金额的问题,如果手动的一个个的去试的话
因为它的张数不知道是多少,排列组合的话,估计一天都凑不出来
用Excel,两种方法快速找出来
方法一:使用规划求解
我们在一个空白的单元格中输入公式:
=SUMPRODUCT(B6:B15,C6:C15)
然后点击数据选项卡,点击模拟分析,规划求解
然后我们的目标,设置为刚刚设置公式的单元格,也就是c3单元格
然后目标值,就是我们希望凑的金额,手动的输入进去
需要添加2个条件,分别是C6:C15,它是整数,并且,它小于等于1
也就是让框选的数据区域,只能是0或者1,进行随机的选取
点击求解,它就得到了如下的结果
其中为1的发票金额凑起来就是我们想要的结果了
方法二:使用递归函数公式
我们直接给出公式结果:
=LET(fx,LAMBDA(x,y,
LET(a,RANDARRAY(10,1,0,1,TRUE),
IF(SUMPRODUCT(x,a)=y,a,fx(x,y)))),
fx(B6:B15,C2))
其中的计算过程,是使用递归思想
我们首先用公式RANDARRAY(10,1,0,1,TRUE)
它可以生成一个10行1列的随机数组,最小是0,最大是1,TRUE表示是取整数
这样它就只得到了0,1
然后我们让这个随机数组和我们的原发票金额相乘相加,得到一个结果:
IF(SUMPRODUCT(x,a)=y,a,fx(x,y))))
如果这个结果不等于我们想要的发票金额
就重复循环调用本身这个函数
所以它的终止条件是:凑到的数组正好等于我们想要的结果,如果不等于,它就会一直自己调用自己重新计算
这样就能得到我们想要的结果了
关于这个小技巧,你学会了么?动手试试吧!