サイコロを振ったときのように、1〜6までの値のうち、任意のどれかを取得したい
といった場合には、Rnd関数を利用します。
Rnd関数は、単精度浮動小数点型の乱数を返します。値の範囲は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 + 最小値」
という数式を用います。
|