使用VBA在Excel中生成不重復(fù)的隨機數(shù)
隨機數(shù)在數(shù)據(jù)分析和計算機編程中非常有用。但是,如果想要生成一組不重復(fù)的隨機數(shù),就需要用到VBA編程語言了。如果你剛開始學(xué)習(xí)VBA,那么本文將為你介紹如何使用VBA在Excel中生成不重復(fù)的隨機數(shù)。步驟
隨機數(shù)在數(shù)據(jù)分析和計算機編程中非常有用。但是,如果想要生成一組不重復(fù)的隨機數(shù),就需要用到VBA編程語言了。如果你剛開始學(xué)習(xí)VBA,那么本文將為你介紹如何使用VBA在Excel中生成不重復(fù)的隨機數(shù)。
步驟1:打開VBA編輯器
首先,打開Excel表格,并點擊【開發(fā)工具】、【Visual Basic】打開VBA編輯器。
步驟2:新建模塊
在VBA編輯器窗口,點擊【插入】、【模塊】,以便輸入程序代碼。
步驟3:輸入程序代碼
在“模塊”的代碼窗口里邊輸入以下VBA程序代碼:
Sub RandomNumberSelect()
Dim i, j, k, x, rn, h, m, n
On Error Resume Next '忽略運行過程中可能出現(xiàn)的錯誤
Set mysheet1 ("Sheet1") '定義工作表
mysheet1.Range("A3:G100").Value "" '清空單元格內(nèi)容
n IsNumeric(mysheet1.Cells(2, 8)) '判斷填充的內(nèi)容是否為數(shù)值
If mysheet1.Cells(2, 8) <> "" And n True And mysheet1.Cells(2, 8) > 1 Then '如果要生成的隨機數(shù)個數(shù)的單元格不為空白,且為數(shù)值(數(shù)值>1),則:
h Int(mysheet1.Cells(2, 8)) '從第三行開始
For m 3 To h
Set myrange mysheet1.Range(mysheet1.Cells(m, 1), mysheet1.Cells(m, 6))
x 0 '初始值為0
j 0
Do
k Int(Rnd * 33 1) '1-33的隨機整數(shù)
i (myrange, k) '統(tǒng)計數(shù)值在同一行(如:A3:F3)里邊出現(xiàn)是次數(shù)
For Each rn In myrange '循環(huán)同一行單元格區(qū)域里邊的每一個單元格
If i 0 And rn "" Then '如果沒有出現(xiàn)過且單元格為空白
k '將數(shù)值寫入該單元格里邊
j j 1
Exit For '退出For循環(huán)
End If
Next
x x 1 '中間變量值遞增1
If j 6 Or x 20000 Then '如果數(shù)值已經(jīng)填充到第六列,或x條件滿足
mysheet1.Cells(m, 7).Value Int(Rnd * 16 1) '從1-16里邊隨機選擇出1個整數(shù)
Exit Do '退出Do循環(huán)
End If
Loop
Next
End If
End Sub
以上程序函數(shù)和思路解讀:
(1)先判斷要生成的隨機數(shù)組的個數(shù)是否為空白、或者非數(shù)值,條件滿足再執(zhí)行后邊的程序,以提高運行速度;
(2)Rnd函數(shù)的取值范圍是>0,且<1的隨機數(shù);
(3)Int是取整函數(shù);
(4)For循壞每執(zhí)行一次,將會執(zhí)行一行的判斷;
(5)使用Do循環(huán)時,應(yīng)當(dāng)避免死循環(huán)的情況發(fā)生,所以,應(yīng)當(dāng)加設(shè)一個條件,以免無法求出結(jié)果時無法退出循壞。
步驟4:指定宏
回到Excel工作表界面,點擊【插入】,在“形狀”里邊選擇一個圖形(如:長方形)并在Excel工作表上面繪制。在繪制好的圖形上邊單擊右鍵,選擇“指定宏”,選擇已經(jīng)在模塊程序里邊寫好的宏的名稱(如:RandomNumberSelect),然后點擊【確定】。
步驟5:輸入?yún)?shù)并生成隨機數(shù)
在指定的單元格(如:H2)里面輸入要生成隨機數(shù)組的個數(shù),點擊已經(jīng)繪制的圖形按鈕(已經(jīng)指定該宏),即可生成隨機整數(shù)。注意,同一行的前6個整數(shù)不重復(fù)。