重複しないランダムな数値を作成したい
1~10までの数値をランダムな順番で取得をしたいケースがあります。
単純なランダム数値は乱数を発生させるRnd関数で可能ですが、重複が許容されます。
重複がない状態でランダムな数値を取得する方法を説明します。
重複しないランダムな数値を生成するサンプルコード
データを格納する配列 arr と既にarrに代入した数値なのかどうか判断する 配列 flgで処理をします。
単純に flg が Trueでないランダムな数値を取得するまでDo WhileでLoopするだけです。
Public Function Call_GetRandomNum_NoOverLap(nMax As Long) As Variant
Dim num As Long
Dim arr() As Long
Dim flg() As Boolean
'■配列定義
ReDim arr(1 To nMax)
ReDim flg(1 To nMax)
'■乱数シード値初期化
Randomize
Dim i As Long
'■ランダムな数値をarrに格納後、
' 再度同じ整数が来た場合は無視し、重複がない状態が来るまで処理し続けるxiの回数分
For i = 1 To nMax
Do
num = Int(Rnd * nMax) + 1
If flg(num) = False Then
flg(num) = True
arr(i) = num
Exit Do
End If
Loop
Next i
'■arrを返す
Call_GetRandomNum_NoOverLap = arr
End Function
実際の使い方
Public Sub sample()
Dim sample As Variant
sample = Call_GetRandomNum_NoOverLap(5)
Debug.Print sample(1) '2
Debug.Print sample(2) '4
Debug.Print sample(3) '3
Debug.Print sample(4) '1
Debug.Print sample(5) '5
End Sub



コメント