我们在E列E6:E13区域用RAND函数生成一组随机数,然后在F6:F8单元格用INDEX MATCH LARGE函数从数据源随机提取3个值。
提取后,要进行判断了,如果不满足3个数之和等于128,就继续提取直到获得最终的结果。
02
用VBA实现自动计算
显然,这是一个计算量很大的过程,整个提取过程是随机的,你也不知道什么时候能刚好把那3个数取出来。
所以,我们这里用VBA来实现这个过程,以下是我编写的VBA代码。
我们来试试完成自动凑数,需要多少时间?
可以看到,这次运行只花了1.9秒就找出了答案。当然每次运行找到答案的时间也是随机的,快的时候零点几秒,慢的时候3、4秒,但基本上我试了几次,平均不2秒的时间就够了。
大家可以想象一下,如果我们靠自己手动来凑数的话要花多长时间。这就是VBA的优势——让计算机帮我们自动执行。
上面我们解决了已知数据个数的情况的计算,但是假如我们不知道到底128是由几个数构成的,那又该怎么处理?
03
问题的升级
在数据个数不确定的情况下,我们可以看数据源,理论上,极限可能就是构成128的个数最小为1个,最大为8个。当然根据数据大小观察,可能不需要8个数、最多4、5个数就够了。
因此,我们将数据源及公式稍作调整。