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

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

関数関連のテクニック

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

(Excel 2000/2002/2003/2007/2010)

Rnd関数は、単精度浮動小数点型の乱数(疑似乱数)を返します。値の範囲は0以上1未満です。
引数Numberには、どのような乱数を返すかを指定します。設定する値は表のとおりです。

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

引数Numberで指定する値と戻り値

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

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

いつも違う乱数系列を使用して乱数を発生させるには、Randomizeステートメントを使って、乱数系列を初期化する必要があります。

次のサンプル1は、1から100の中からランダムに10個の数値を抽出し、A列に出力します。

●サンプル1●

Sub Sample()
    Dim i As Long

    '乱数系列を初期化
    Randomize
    
    For i = 1 To 10
        '1から100までの乱数を取得
        Cells(i, 1).Value = Int((100 - 1 + 1) * Rnd + 1) '---(1)
    Next i
End Sub

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

●ポイント●

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

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

という数式を用います。