作者:乔山办公网日期:
返回目录:excel表格制作
Sub 不重7a686964616fe4b893e5b19e337复随机数()
Dim i As Long, j As Long
i = Application.InputBox("请输入上限:" & Chr(10) & "输入1000即表示产生1到1000的不重复随机数" & " 以此类推!范围在1--60000之间。" & Chr(10) & "结果产生在新工作表。" & Chr(10) & "如果输入的数超过10000,可能要计算3-5秒,请等候结果显示!", "输入上限", 100, , , , , 1)
If i = False Or i < 1 Then Exit Sub
Randomize
Dim myArr
Worksheets.Add
Application.ScreenUpdating = False
Range("a1") = 1
Range("a1").DataSeries 2, , , 1, i
myArr = Range("a1:b" & i)
For j = 1 To i
a = Int(Rnd() * i) + 1
b = Int(Rnd() * i) + 1
c = myArr(a, 1)
myArr(a, 1) = myArr(b, 1)
myArr(b, 1) = c
DoEvents
Next
Range("a1:a" & i) = myArr
Application.ScreenUpdating = True
End Sub
假设zd产生1到100之间10个不重复随机整数,在A列得到数据,A2公式:(为方便设计公式,从第二行输版入公式)
=SMALL(IF(COUNTIF(A$1:A1,ROW($1:$100))=0,ROW($1:$100)),RANDBETWEEN(1,101-ROW(A1)))
数组公式,需要按CTRL+SHIFT+回车,完成公权式,下拉10行。
为方便设计公式知,数据在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。