如何使用randomize和rnd獲取隨機變量的重複列表?在VBA中重複隨機變量
通過重複列表,我的意思是如果你運行一個循環來獲得10個隨機數,列表中的每個隨機數將是唯一的。另外,如果你要再次運行這個序列,你會得到和以前一樣的10個隨機數。
如何使用randomize和rnd獲取隨機變量的重複列表?在VBA中重複隨機變量
通過重複列表,我的意思是如果你運行一個循環來獲得10個隨機數,列表中的每個隨機數將是唯一的。另外,如果你要再次運行這個序列,你會得到和以前一樣的10個隨機數。
從微軟自己的嘴巴:
要重複隨機數序列,請使用隨機化與數字參數前帶負參數調用賽第一輪。
查看here瞭解詳情。
全部:
備註
的Rnd
函數返回一個小於1但大於或等於零的值。
數的值確定如何Rnd
產生一個隨機數:
對於任何給定的初始種子,產生相同數目的序列,因爲與Rnd
函數每個連續調用使用先前的數作爲下一種子序號中的數字。
在致電Rnd
之前,請使用不帶參數的Randomize
語句,以基於系統計時器的種子初始化隨機數發生器。
爲了產生隨機整數在給定的範圍內,使用以下公式:
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
在此,上界是在範圍內的最高數量,並且下界是在範圍內的最低數目。
注意要重複隨機數序列,請使用Randomize
加上一個數字參數前帶負參數調用賽第一輪。使用具有相同數值的隨機數不會重複先前的順序。
舉例來說,如果你把這個代碼到Excel,它會產生不同數量的每次運行時間:
Sub xx()
' x = Rnd(-1) '
Randomize 10
MsgBox (Rnd)
End Sub
但是,如果取消註釋x = Rnd(-1)
線,它所產生的相同每次運行的編號。
請注意,你必須做兩個的東西。請撥打Rnd
,並帶有否定參數和請撥打Randomize
並附上特定參數。改變這些東西會給你一個不同的種子(因此也是序列)。
編輯:
回覆您的評論:
通過重複序列,我的意思是,如果你運行一個循環,以獲得10個隨機數字,列表中的每個隨機數將是獨特。另外,如果你要再次運行這個序列,你會得到和以前一樣的10個隨機數。我所描述的是否有意義?
您現在需要多一條信息。你所要求的不是隨機數,而是一種洗牌算法。我會告訴你我之前給出的關於如何做到這一點的回答here。您只需將洗牌算法與上面詳述的種子設置結合起來,即可獲得可重複的唯一序列。
而這裏有一些代碼表明它在行動。這個子程序的每一次運行都返回序列4 1 5 6 2 3 7 10 9 8
,所以我認爲這就是你以後的一個可重複的「隨機」,獨特的序列。如果您希望能夠生成不同的序列(但仍以可重複的方式),則只需更改給予Randomize
的值。
Option Explicit
Option Base 1
Sub xx()
Dim x(10) As Integer
Dim xc As Integer
Dim xp As Integer
Dim i As Integer
Dim s As String
For i = 1 To 10
x(i) = i
Next
xc = 10
i = Rnd(-1)
Randomize 1
s = "Values:"
For i = 1 To 10
xp = Int(Rnd * xc) + 1
s = s & " " & CStr(x(xp))
x(xp) = x(xc)
xc = xc - 1
Next i
MsgBox (s)
End Sub
通過重複序列,我的意思是如果你運行一個循環來獲得10個隨機數,列表中的每個隨機數將是唯一的。另外,如果你要再次運行這個序列,你會得到和以前一樣的10個隨機數。 我所描述的是否有意義? – sooprise 2010-05-21 20:04:25
@Soo,除非我再次誤解,否則這是非常有意義的:-)我已根據評論更新了新信息的答案。 – paxdiablo 2010-05-21 20:32:33
+1因爲我很感激,所以我能夠根據自己的需求來調整這個功能,儘管它的工作原理如何。在添加了「」值後,我無法確定發生了什麼事情:「'到's'。或者,甚至在此之前,那是對於理解它最重要的「數字運算」部分。一般來說,我希望我能看到這個/ VBA的「評估公式」等效步驟。 – ZealousHypocrites 2015-12-11 21:18:11
詳細闡述「重複列表」。 – Steven 2010-05-21 19:27:51