求excel公式,设置一个总数,其他单元格根据总数自动凑和
仅借用函数,没有绝对随机的方法可满足需求,除非添加VBA。
不过我们有相对随机的方法可以替代
A1输入
=ROUNDUP(RAND()*2*$A$10/9,2)
A2输入
=ROUNDUP(RAND()*2*($A$10-SUM(A$1:A1))/(9-ROW(A1)),2)
下拉至A8
A9输入
=A10-SUM(A1:A8)
每次都用5000-已经生成随机数之和,来生成新的随机数,直到9个数全部产生。
这里的随机数有个特点:
第1个数<(5000*1/9=1111.11)
第2个随机数<((5000-A1)/8)
以此类推。
故以上随机数不能直接按顺序分配给1-9个单位,那样第1个单位永远得不到大于1111的数;
但是如果将得到的9个随机数再随机排列一次,就可以使用了,符合随机概念。
下面解释函数
=ROUNDUP(RAND()*2*($A$10-SUM(A$1:A1))/(9-ROW(A1)),2)
1、$A$10-SUM(A$1:A1):5000-已经产生随机数的之和
2、RAND()*2:RAND()的意思就是产生0-1的随机数,此为随机数生成核心函数,因其平均值为0.5,所以再乘以2;
3、(9-ROW(A1)):ROW(A1)是A1单元格所在的行号,9-ROW(A1)即为还剩下多少个随机数需要产生;
4、ROUNDUP(XXX,2):XXX保留俩位小数,四舍五入。
以一个实际数子的产生,再解释一遍
我们假设已经产生3个数,且前面3个数之和为2000,在第4行产生第4个随机数。
1、得到5000-2000=3000,即剩下的数总和为3000;
2、9-ROW(A3)=6,还有6个数需要产生;
3、3000/6=500,6个数平均值为500;
4、500*RAND()*2,产生一个介于0-1000的随机数,这里再解释一下2这个数,如果我们不乘以2,那么每次产生的都是小于平均数的随机数(本次不乘以2就是产生小于500的数),那么最后的结果就是第9个数(A10-SUM(A1:A8))会偏大,且大于2500的概率异常,不满足随机属性。
5、ROUNDUP(500*RAND()*2,2),500*RAND()*2保留俩位小数,四舍五入。
以上就是随机数产生的相对公式及对应解释,若有疑问之处,欢迎沟通。