つらつら Excel VBA

私の備忘録です。

ExcelVBA ランダム値を重複なしで取得

 

Dim DIC As Object, mKey

Dim i As Integer, rd As Integer, no As Integer
Set DIC = CreateObject("Scripting.Dictionary")
For i = 1 To 52 '連想配列の作成。
    DIC.Add i, i
Next

For i = 52 To 1 Step -1
    rd = getRandom(1, i) '1~iの範囲でランダム値を得る自作関数。これは自分で作る!
    mKey = DIC.keys
    no = mKey(rd - 1) 'ここで得た数値を使用する。

    'Debug.Print "i=" & i & ",rd=" & rd & ",no=" & no
    DIC.Remove no '使用した数値を削除。

Next

※使用例としてはトランプ。もっと良い方法があると思います。