在指定数字范围内生成不重复的随机整数
的有关信息介绍如下:关于生成随机数,在excel中有两个函数RAND与RANDBETWEEN大家应该有所了解,但借助这两个函数生成的随机整数可能会出现重复的数字,今天就给大家介绍一个生成不重复的随机整数的套路公式
假设要求在500至600数字范围内生成10个不重复的随机整数
公式:=IFERROR(INDEX(MOD(SMALL(RANDBETWEEN(ROW($500:$600)^0,10)/1%/1%+ROW($500:$600),ROW($1:$10)),10000),ROW(A1)),"")
因为是数组公式,输入后要ctrl+shift+enter三键结束,再拖动向下填充,公式中的数字需要根据要求条件的变化调整,比如:指定数字的范围,生成数字的个数等
公式原理解析:
公式的核心部分是RANDBETWEEN(ROW($500:$600)^0,10)
a). ROW($500:$600)返回的是500-600之间的自然数数组(共101个元素)
b). 再将数组做0次幂后得到元素全是数字1的数组(共101个元素)
c). 然后用函数RANDBETWEEN就会生成一个新的数组,这个新数组的元素全部是1到10之间的随机数(仍为101个元素)
计算公式验证:将上面这段公式抹黑,按F9就可以得到某一组101个随机数字组成的数组,如图
公式原理解析:
接着上一步分析,RANDBETWEEN(ROW($500:$600)^0,10)/1%/1%+ROW($500:$600)
a).RANDBETWEEN(ROW($500:$600)^0,10)/1%/1%就是将上步生成数组的每个元素放大10000倍,即生成的数组元素是10000至100000之间的数字,且数字全部是10000的整数倍
b).ROW($500:$600)在第一步已介绍,净晃舍返回的是500-600之间的自然数数组(共101个元素)
c). 那么,两个相同维度的数组相加,就是比较大的整数(至少是10000的倍数)加上500至600之间的小整数
计算公式验证:将上面这段公式抹黑,按F9就可以得到某一组101个随机数字组成的数组,如图
公式原理解析:
为了分析方便,我们将上面两步生成的数组定义为arr,那么公式简化为SMALL(arr,ROW($1:$10))
a). small函数是返回一个数组/区域中第N小的值,这个N由第二参数决定,此例由ROW($1:$10)决定
b). 而ROW($1:$10)返回的是1到10之间的自然数数组 {1;2;3;4;5;6;7;8;9;10}
c). 那么,整个公式意思就是从arr这个大数字组成的数组中返回最小的10个数字
计算公式验证:将上面这段公式抹黑,按F9就可以得到某一组10个随机数字组成的数组,如霜披图
公式原理解析:
a). 上一步我们已经得到一个由10个随机数字组成的数组,但这个数组中数字还不返讨在我们最终想得到的数字范围内(500-600)。但是,你一定会发现,依据上面的分析,这10个数字实际上是一个大整数(10000-100000之间的整数)外加一个小整数(500-600之间的整数)。
b). 用MOD函数将这10个数字对10000求余数,这个余数就正好落在我们要求的取数范围内(500-600之间)
计算公式验证:将上面这段公式抹黑,按F9就可以得到某一组10个随机数字组成的数组,这个10个数字就是我们最终要的结果,如图
公式原理解析:
既然10个随机数字已经有了结果,剩下的就是将其输出到单元格中,暂且将这个数组定位为brr,公式简化为INDEX(brr,ROW(A1))
a). 当公式向下拖动填充时,分别返回第一个随机数INDEX(brr,1);第二个随机数INDEX(brr,2)……第十个随机数INDEX(brr,10)
b). 当然,如果你想将公式向右(列方向拖动),则需要将ROW(A1)更改为COLUMN(A1)
公式原理解析:
最后一步是容错处理,因为在公式向下拖动填充的过程中,当填充到第11行时,已经将数组中10个随机数字输出完毕,这时就会返回一个错误值。在公式外层嵌套一个IFERROR函数,当出现错误值时,返回空值