ロト6のナンバー抽出(乱数発生)

Rnd関数

ロト6は、1から43までの数字のなかから6個の数字を選択するもので、各6個の数字は重複しません。6個の数字をランダムに出すために、乱数を使用したいと思います。
なお、何らかの手法で、当たりを予測しようとするものではありませんのでお間違えの無いように!(^_^;)

Rnd関数は単精度浮動小数点数型 (Single) の乱数を返します。

構文

構文
(以下Helpより)-----

Rnd[(number)]
引数 number は省略可能です。引数 number には、単精度浮動小数点数型 (Single) の数値または任意の有効な数式を指定します。

戻り値

numberの値
<0常に、引数 number のシード値によって決まる同じ数値を返します。
>0乱数系列の次の乱数を返します。
=0直前に生成した乱数を返します。
省略乱数系列の次の乱数を返します。

Rnd 関数は 0 以上、1 未満の範囲の値を返します。
引数 number の値によって、Rnd 関数が返す乱数が決まります。
初期シード値が変わらない限り、一連の Rnd 関数が返す乱数系列は同じになります。これは、連続する各 Rnd 関数が乱数系列の中の直前の乱数をシード値として、次の乱数をそれぞれ生成するためです。

システム タイマーから取得した新しいシード値を使って、乱数ジェネレータを初期化するには、Rnd 関数を呼び出す前に、引数を指定せずRandomizeステートメントを実行してください。

任意の範囲の整数の乱数を生成するには、次の式を使ってください。
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
この式では、変数 upperbound には範囲の上限の値を指定し、変数 lowerbound には範囲の下限の値を指定します。

メモ 乱数系列を繰り返すには、数値を指定して Randomize ステートメントを実行する直前に、負の引数を指定して Rnd 関数を呼び出します。引数 number に同じ値を指定して Randomize ステートメントを使用しても、前の乱数系列を繰り返すことはできません。

シード 擬似乱数の生成に使われる初期値。たとえば、Randomize ステートメントを使うと、Rnd 関数が重複しない擬似乱数系列を生成するために使うシード値が生成されます。

-----(以上Helpより)

6個の乱数を5回発生させます。数が重複しないように、一度発生させた数を配列の引数に割りあてています。


Sub Loto()
    Dim Cno As Integer, Rno As Integer
    Dim Kazu As Integer
    Dim Eflg(1 To 43) As Boolean                    ’発生した乱数を配列に割り当てる

    Range("A1:E6").ClearContents                    ’セル範囲A1-E6の数式、文字を削除
    Randomize                                       ’乱数ジェネレータを初期化
    For Cno = 1 To 5
    	Erase Eflg
        For Rno = 1 To 6
            Do
                Kazu = Int((43 - 1 + 1) * Rnd + 1)  ’最大値43,最小値1で乱数を発生
            Loop Until Eflg(Kazu) = False
            Cells(Rno, Cno).Value = Kazu
            Eflg(Kazu) = True                       ’一度発生した数はTrueにする
        Next Rno
        Range(Cells(1, Cno), Cells(6, Cno)) _		’昇順にソートする
               .Sort Key1:=Cells(1, Cno), order1:=xlAscending
    Next Cno
End Sub

結果
実行結果の例


参考
Loto6の1等当選確率
まず、1個目の数字が当たる確率は、43個あるうちの6個があたれば良いので
最初の確率の例
次に二個目の数字が当たる確率は、すでに1つは確定しているのでそれぞれ1つ引いた、42個あるうちの5個となり、
次の確率の例
以下同様にして、各出目の確率を出してそれらを掛け合わせて、
全確率の例
約610万分の1とゆう、とんでもなく低い確率となります。2010年の人口でいうと、東京都が約1300万人、千葉県が約620万人なので、 当選する人は全東京都民で2人、全千葉県民では1人となります。

Excel VBAのチップス一覧へ戻る

ツイート
このエントリーをはてなブックマークに追加
inserted by FC2 system