2013-10-01 83 views
0

我已經衝進了互聯網,仍然沒有找到任何解決方案這個問題:從Excel-VBA中的數組中隨機元素

我有一個這樣的數組;

Dim PayRate As Variant 
PayRate = Array(10, 20, 30) 

Cells(i, "E").value = PayRate(Int((2 - 1 + 1) * Rnd + 1)) 

但這隻會給我從陣列20和30(元件1和2),我也想在混合元件0 = 10?我該怎麼做呢?

+1

嘗試:'PayRate(INT((2 - 0 + 1)*賽第一輪+ 0))' –

回答

2

這將做到這一點:Int(Rnd() * 3) + 1

Rnd()返回從均勻分佈的隨機數,包括0至不包括1

重要:你必須在模塊的頂部有Option Base 1所以您的PayRate數組的最低界限爲1.看起來像您給出了您的問題文本。

+0

所有+1爲了簡單 –

+0

後同意這很簡單,但'詮釋(RND()* 3)+ 1'永遠不會返回'0'。因此,您必須使用'Option Base 1',它通常不是默認的(?),即大多數人假定數組的第一個元素索引爲0. –

+0

設置'Option Base 1',然後將1加到隨機的結果數字將其轉換爲基於1的索引不是一個好主意。 'Option Base 1'改變了它在***中聲明的整個代碼模塊的語法。只需使用'Int(Rnd()* 3)'與默認索引。 – Comintern

0

考慮:

Sub dural() 
Dim PayRate As Variant 
PayRate = Array(10, 20, 30) 
i = 1 
N = Application.WorksheetFunction.RandBetween(LBound(PayRate), UBound(PayRate)) 
Cells(i, "E").Value = PayRate(N) 
End Sub 

我喜歡這個,因爲它是獨立的陣列中,或是否元件的數量的它是零基或一個基。

+1

這是無用的,因爲它可能會帶來重複值檢查[鏈接](http://stackoverflow.com/questions/42440853/randomise-rows-in-vba) – Moreno

+0

@Moreno沒有要求避免重複的問題在這個問題。 –