重複しないランダムな数値を作成したい
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
コメント