Rnd関数

Rnd 関数は単精度浮動小数点数型 (Single) で0以上1未満の乱数を返します。

スポンサーリンク

Rnd関数の使用方法

構文
Rnd(Number)

【戻り値】 単精度浮動小数点型 (Single)
省略 説明
Number 省略可能な引数です。 省略しない場合は単精度浮動小数点数型 (Single) の数値または任意の有効な数式を指定します。
引数 Number と戻り値の関係
Number の値 戻り値
< 0 常に、引数 Number のシード値によって決まる同じ数値を返します。
> 0 乱数系列の次の乱数を返します。
0 直前に生成した乱数を返します。
省略したとき 乱数系列の次の乱数を返します。

Rnd関数の使用例

毎回同じ乱数を生成する

毎回同じ乱数を発生させる例です。最初にRnd 関数の引数にマイナスのシード値を指定することで決まった値を発生させます。その後、Rnd 関数を引数なしで呼び出して同じ乱数系列を再現しています。

Sub sample_ef064_01()
    Dim i       As Integer

    '再現したい乱数系列のシード値(任意)をマイナスで指定
    Rnd (-2.5)

    '乱数を5回発生
    For i = 1 To 5
        Debug.Print "i=" & i & ":" & Rnd
    Next i
End Sub

 For…Next

シード値が同じであれば何回実行しても結果は同じになります。

毎回異なる乱数を生成する

毎回異なる乱数を発生させる例です。Randomize ステートメントを引数なしで呼び出すことで、システムタイマーをもとにしたシード値を乱数ジェネレータに設定します。その後 Rnd 関数を呼び出すことで毎回異なる乱数を発生させることができます。
Randomize ステートメントを呼び出して乱数のシード値を変更しないと、エクセル再起動後の結果が同じになってしまいますので注意してください。

Sub sample_ef064_02()
'サイコロの試行にみたてて1~6の乱数を発生させ、
'その回数をカウントします。

    '数値型の変数はゼロで初期化されます。
    Dim cnt(1 To 6) As Long
    Dim i       As Long
    Dim num     As Integer

    '乱数ジェネレータの初期化
    Randomize

    For i = 1 To 1000
        '1~6までの乱数を発生
        num = Int(6 * Rnd + 1)
        '出た目のカウントを加算
        cnt(num) = cnt(num) + 1
    Next i

    'それぞれの出た回数を表示
    For i = 1 To 6
        Debug.Print i & "の目:" & cnt(i) & "回"
    Next i
End Sub

 Int、Fix関数 配列の宣言  For…Next

エクセルを起動しなおしても異なる結果が得られます。
(偶然一致してしまう可能性はもちろんありますが・・・)

タイトルとURLをコピーしました