Home > 即効テクニック > Excel VBA > 関数関連のテクニック > 単精度小数点型の乱数を返す(Rnd関数)

即効テクニック

関数関連のテクニック

単精度小数点型の乱数を返す(Rnd関数)

(Excel 2000)
単精度浮動小数点型の乱数を返します。値の範囲は0以上1未満になります。
引数numberでは、どのような乱数を返すかを指定します。設定する値は次の一覧のようになります。


・引数numberで指定する値と戻り値の関係
number        戻り値
0未満         引数numberのシード値によって決まる同じ数値を返す
0より大きい   乱数系列の次の乱数を返す(既定値)
0             直前に生成した乱数と同じ乱数を返す


乱数が作成される際には、まず、乱数系列(あるいは乱数ジェネレーター)と呼ばれる、乱数のセットが作成されて、そこから順にRnd関数の戻り値として返されます。つまり、同じ乱数系列を使用すると、まったく同じ乱数が作成されることになります。引数numberに0未満の数値を指定した場合には、その値で求められる乱数系列を参照して乱数が返されるため、いつも同じ値が同じ順番で返されることになります。
いつも違う乱数系列を使用して乱数を発生させるには、Randmizeステートメントを使って、乱数系列を初期化する必要があります。


  構文 Rnd(Number)

 設定項目        内容
  Number          乱数を作成する方法を指定 [省略可能]


次のサンプルは、1から100の中からランダムに値を10個抽出するコードになります。


●サンプル●
Sub RndSamp1()

    Dim i As Integer
    Dim myStr(9) As String
    '---変数系列を初期化を変更
    Randomize
    For i = 0 To 9
        '---(1)1から10までの乱数
        myStr(i) = Int((100 - 1 + 1) * Rnd() + 1)
    Next i
    MsgBox Join(myStr, vbCr)

End Sub
Randomizeステートメントは、このサンプルのように、Rand関数よりも前で
一回だけ使用するようにしてください。

●ポイント●
Rnd関数で返される値を、ある任意の範囲内の数値にしたい場合には、(1)のステートメントのように、

「Int(最大値 - 最小値 +1 ) * Rnd + 最小値」

という数式を用います。