如题所述
.随机不重复数字序列的生成方法一 有些情形下,我们需要生成一个不重复的随机序列。
比如:我们要模拟洗牌,将一副扑克牌去掉大小怪后剩下的52张打乱。
我们来看看在worksheet里面如何利用内置函数实现这个功能。
(1)在A1-A52间填入"=INT(RAND()*52)+1",产生1-52间的随机数,注意这里是有重复的
(2)在B1-B52间填入1-52
(3)在C54-BB54填入1-52
(4)在C1填入"=IF(ROW()=C$54,INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),IF(ROW()=INDEX($A$1:$A$52,C$54),INDEX(B$1:B$52,C$54),B1))"。
分项解释:
a:ROW()=C$54,如果当前行等于当前交换所排的序号
b:INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),返回在B1到B52中选择A1:A52中的第C54个值
c:IF(ROW()=INDEX($A$1:$A$52,C$54),否则的话,如果当前行等于A1:A52中第C54个值,则:
d:INDEX(B$1:B$52,C$54),返回B1:B52中的第C54个值
e:若以上条件都不满足,则返回B1
(5)将C1复制到C1:BA52这个区域里面
(6)在BA1:BA52中,我们就得到了一个不重复的随机序列,按F9可以生成一个新序列。
随机产生六位数字密码=INT(RAND()*(899999-10001))+100001
EXCEL生成前2位是大写字母,中间4位是小写字母,后两位是数字
=CHAR(65+INT(RAND()*16))&CHAR(65+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&INT(RAND()*10)&INT(RAND()*10)
你看懂没,反正我是没看懂,但这确实就是方法。
比如:我们要模拟洗牌,将一副扑克牌去掉大小怪后剩下的52张打乱。
我们来看看在worksheet里面如何利用内置函数实现这个功能。
(1)在A1-A52间填入"=INT(RAND()*52)+1",产生1-52间的随机数,注意这里是有重复的
(2)在B1-B52间填入1-52
(3)在C54-BB54填入1-52
(4)在C1填入"=IF(ROW()=C$54,INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),IF(ROW()=INDEX($A$1:$A$52,C$54),INDEX(B$1:B$52,C$54),B1))"。
分项解释:
a:ROW()=C$54,如果当前行等于当前交换所排的序号
b:INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),返回在B1到B52中选择A1:A52中的第C54个值
c:IF(ROW()=INDEX($A$1:$A$52,C$54),否则的话,如果当前行等于A1:A52中第C54个值,则:
d:INDEX(B$1:B$52,C$54),返回B1:B52中的第C54个值
e:若以上条件都不满足,则返回B1
(5)将C1复制到C1:BA52这个区域里面
(6)在BA1:BA52中,我们就得到了一个不重复的随机序列,按F9可以生成一个新序列。
随机产生六位数字密码=INT(RAND()*(899999-10001))+100001
EXCEL生成前2位是大写字母,中间4位是小写字母,后两位是数字
=CHAR(65+INT(RAND()*16))&CHAR(65+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&INT(RAND()*10)&INT(RAND()*10)
你看懂没,反正我是没看懂,但这确实就是方法。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2012-09-18
在A列的A1:A65输入01-65,在B1输入
=RAND()
将B1的公式填充至B65,以B列排序,则A列的01-65就成了随机排列了。本回答被网友采纳
=RAND()
将B1的公式填充至B65,以B列排序,则A列的01-65就成了随机排列了。本回答被网友采纳
第2个回答 2012-09-18
选中需要填充不同随机数的区域,执行宏:
Sub GetRand2()
Selection.ClearContents
ct = Selection.Count - 1
For Each a In Selection
v = Round(ct * Rnd(), 0) + 1
While Check(v)
v = Round(ct * Rnd(), 0) + 1
Wend
a.Value = v
Next
End Sub
Function Check(v)
Check = False
For Each a In Selection
If a.Value = v Then Check = True
Next
End Function
Sub GetRand2()
Selection.ClearContents
ct = Selection.Count - 1
For Each a In Selection
v = Round(ct * Rnd(), 0) + 1
While Check(v)
v = Round(ct * Rnd(), 0) + 1
Wend
a.Value = v
Next
End Sub
Function Check(v)
Check = False
For Each a In Selection
If a.Value = v Then Check = True
Next
End Function
第3个回答 2012-09-18
随便找个单元格输入公式 =RANDBETWEEN(1,65)
下拉即可,随机数在1至65之间
下拉即可,随机数在1至65之间
第4个回答 2012-09-18
输入01-02后选中在右下角光标变成黑十字往你所走的方向拉就可以了!