特に最小値が「1」の場合は、(紛らわしいので)場所を間違えないように注意しましょう。
Int((最大 – 最小 + 1) * Rnd + 最小)
ランダム関数を使って1~5の値のいずれかを取得
最小値:1
最大値:5
Int((5 – 1 + 1) * Rnd + 1)
ランダム関数を使って5~10の値のいずれかを取得
最小値:5
最大値:10
Int((10 – 5 + 1) * Rnd + 5)
本当にランダムかテストする
実際に「最小値:1」、「最大値3」でランダムに偏りなく、均等に選ばれるかで10万回テストしてみました。
Sub Random関数()
Dim i As Long
Dim lng1 As Long
Dim lng2 As Long
Dim lng3 As Long
For i = 1 To 100000
Select Case Int((3 – 1 + 1) * Rnd + 1)
Case 1: lng1 = lng1 + 1
Case 2: lng2 = lng2 + 1
Case 3: lng3 = lng3 + 1
Case Else: MsgBox “ありえない数値”, vbCritical
End Select
Next i
Debug.Print “1の回数:” & lng1
Debug.Print “2の回数:” & lng2
Debug.Print “3の回数:” & lng3
End Sub
結果、こんな感じでした。まずまずといったところでしょうか?
1の回数:33475
2の回数:33174
3の回数:33351