重複しないランダムな数値の取得

Last UpDate 2000/05/12



    ' 変数宣言
    Dim tmpIndex As Long 		' ランダム数値の一時保存用
    Dim I As Long 			' ループカウント用
    Dim RndCheck As Collection		' ランダム重複チェック用
    Dim RndNumber() as Long		' ランダム数値の取得用
    Dim ErrCheck As Long		' エラーチェック用

    ' 重複しないランダムな数値の取得数を設定
    ' この数値を変更する事で任意の数の重複しないランダムな数値が取得できます。
    Const tmpCountSet As Long = 100
    
    ' ランダム数値の重複チェック用にコレクションオブジェクトを使用。
    Set RndCheck = New Collection

    ' ランダム生成ジェネレーターを「1」で初期化
    ' (Rnd関数で使用するランダム生成ジェネレーターを初期化しています)
    ' この数値は任意の数値を指定できます。
    ' この処理を実行するたびに同一の数値を取得したい時は、Randomizeステートメントの前に
    ' Rnd -1 を実行してください。
    Randomize 1 

    ' ランダムな数値の保存用配列をtmpCountSet個に再設定します。
    ReDim RndNumber(1 To tmpCountSet)

    ' 1 から tmpCountSet までの重複しないランダムな数値を取得します。
    For I = 1 To tmpCountSet
        Do
            tmpIndex = (Rnd * tmpCountSet) + 1
            On Error Resume Next
            RndCheck.Add tmpIndex, CStr(tmpIndex) ' キーには文字列を指定する
            ErrCheck = Err.Number
            On Error GoTo 0
            

            ' 重複した数値がRndCheckに設定された時は
            ' エラーナンバー「457」がErrCheckに設定されます。
            If ErrCheck = 0 Then
                RndNumber(I) = tmpIndex ' 重複しない数値として設定
                Exit Do
            End If
        Loop
    Next I

    ' ランダムチェック用に移用したコレクションオブジェクトを初期化します。
    Set RndCheck = Nothing


VisualBasic Help参照ポイント。
Collection オブジェクト
Rnd関数
Randomizeステートメント



以上の処理で、重複しない数値をランダムに取得する事が出来ます。

参考にして頂ければ幸いです。


上記の処理は、詳細は異なりますが、スライドでSHOWで使用している処理です。
ランダムにファイルを取得する時は、ファイルリストボックス又はリストボックスを使用して、Object名.List(Index)でファイル名を取得します。

Copyright(C) 1999-2000 スタジオ T-MAN
MailTo:t-man@mx4.ttcn.ne.jp