Excel中有3个关于随机数的基本函数。
RAND,生成0~1之间的随机小数,不需要参数,直接输入函数即可;
RANDBETWEEN,生成指定区间内的随机整数,通过2个参数指定区间上限和下限;
RANDARRAY,生成一个随机数组,通过参数指定数组的行数和列数,指定随机数的区间以及数字类型(整数或小数)。
用它们可以生成各式各样的随机数,但实际应用中经常需要一些并非真正随机的随机数,例如:1~10之间的10个不重复随机数。
可以用RANDBETWEEN限定范围在1~10内,但它有极大可能重复,所以需要转换思路。
RAND+RANK
在A1输入以下公式并下拉填充至A10得到10个随机数:
=RAND()
在B2单元格输入以下公式并填充至B10:
=RANK(A1,$A$1:$A$10,1)
通过个A列中的各个数字排名获取1~10之间的随机数。
按F9刷新A列数据,同时B列的排名也会相应刷新,实现随机效果。
RAND+RANK
RANDBETWEEN+RANK+COUNTIF
理论上RAND产生10个随机小数会有重复的风险,尽管概率很低。加一个COUNTIF是有效的解决方案。
为了体现这种效果,将A列的公式改为用RANDBETWEEN:
=RANDBETWEEN(1,10)
极大概率会产生重复数字。
B列的公式修改为:
=RANK(A1,$A$1:$A$10)+COUNTIF($A$1:A1,A1)-1
COUNTIF-1的作用是统计当前值在此之前出现的次数。
例如案例的8出现了两次,RANK得出的排名都是5,在第二个8出现的时候,COUNTIF统计到截至A7单元格它出现了2次,减去1就是在此之前出现过1次,所以在5的基础上加1,避免重复名次的出现。
RANDBETWEEN+RANK+COUNTIF
SORTBY+SEQUENCE+RANDARRAY
在高版本中则要简单很多,还可以省去辅助列:
=SORTBY(SEQUENCE(10),RANDARRAY(10),1)
SEQUENCE产生数字队列1~10;
用SORTBY对其排序;
排序的依据则是一个由RANDARRAY产生的随机数字数组。
SORTBY+SEQUENCE+RANDARRAY
喊话微软:考虑考虑给RANDARRAY添加个第6参数一步到位吧。
TRUE表示不重复;
FALSE表示可重复。