莫度编程网

技术文章干货、编程学习教程与开发工具分享

财务多个发票凑一个金额,花了1天,同事用Excel2分钟搞定

我们现在有很多发票金额,如下是模拟的数据,这里有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))))

如果这个结果不等于我们想要的发票金额

就重复循环调用本身这个函数

所以它的终止条件是:凑到的数组正好等于我们想要的结果,如果不等于,它就会一直自己调用自己重新计算

这样就能得到我们想要的结果了

关于这个小技巧,你学会了么?动手试试吧!

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言

    Powered By Z-BlogPHP 1.7.4

    蜀ICP备2024111239号-43