如,要求,1-50个数字随机不重复分布在50个单元格里
1、在A1单元格输入“=IF(ROW()=1,INT(RAND()*50+1),LARGE(IF(COUNTIF(INDIRECT("A1:A"&ROW()-1),ROW($1:$50)),,ROW($1:$50)),INT((51-ROW())*RAND()+1)))”,不要直接回车或点前边的勾确认,而要点CTRL+SHIFT+ENTER三键结束。
2、鼠标移到A1单元格右下角,光标变为黑十字,向下拖拽到A50即可。
1.
一种思路是,先 生成1~15间的一个随机数,再生成第二个不重复的随机数,再生产第三个不重复的随机数……这样效率很低。楼上某人的解答完全是在浪费时间,请您直接无视他。
2.
另一种思路,先 生成1~15这个数组,然后从15个数字中抽出第一个,第二个,第三个……这样就不会发生重复了。excel表格里每一个单元格都有一个行数,比如b1这个单元格的行号是1,b15的行号是15,这样我们就有了一个天然的数组——每个单元格的行号(1到65536),现在我们只要在单元格里从这个天然的数组随机地取出一个数字,然后不重复的抽取第二个,第三个……
用辅助列的方法最为简单而且易懂:
如图,在随便哪一列,例如c列,输入随机数函数
=rand()
下拉至20行,然后为了页面美观将其隐藏即可
选定a1-a10,输入数组公式:
=rank(c1:c20,c1:c20)+30
确定即可
35个不重复数,范围1-35之间,不就是1-35吗。
如果范围大一点,随机数个数少一点,重复的几率就小。
你的问题可改为,1-35在指定35个单元格内随机排列。
需要用VBA实现。
为方便设计公式,数据在A1,公式在C1,如图:
C1公式:
=SMALL(IF(COUNTIF($B1:B1,ROW(INDIRECT("1:"&$A1)))=0,ROW(INDIRECT("1:"&$A1))),RANDBETWEEN(1,$A1-COLUMN(A1)+1))
数组公式,按三键(CTRL+SHIFT+回车)完成公式,右拉到Q1。