サイトについて      連絡先   検索

VBA Rnd 関数

はじめに

Excel VBA の Rnd 関数を紹介します。

Rnd 関数は、乱数 (ランダムな数値) を返します。

ランダムな値を取得したいときに使用します。

構文

Rnd

Rnd(数値)

名前 説明
引数「数値」省略可能です。指定した数値が負の値、0、正の値で次のようになります。
  • 負の値:シード値を指定して乱数を返します。
  • 0:直前の乱数の値を返します。
  • 正の値:次の乱数の値を返します。引数を省略したときと同じです。
戻り値数値型 (Single)

解説

Rnd 関数は 0 ~ 1 未満の値を返します。

乱数を次々に取得したいときは、引数なしで呼び出すか正の値を指定して呼び出します。

Rnd 関数は乱数表によって次に取得する乱数の値が決められています。乱数表はいくつもあり、それを識別する値をシード値と呼びます。

シード値が同じなら毎回決まった順番で乱数が返されます。Excel を起動したときのシード値は毎回同じです。

シード値をランダムに変更するには Randomize ステートメントを呼び出します。Rnd 関数の引数「数値」に負の値を指定するとシード値を指定できます。

次のコードで指定した範囲の整数をランダムに取得できます。

Const low As Integer = 1
Const high As Integer = 10
Dim i As Integer
Randomize

' low から high の範囲の整数をランダムに取得します。
i = Int((high - low + 1) * Rnd + low)
Debug.Print(i)

使用例

Excel 起動時にこのコードを実行すると毎回同じ結果になります。

Dim f As Single
f = Rnd
Debug.Print(f) ' 0.7055475
f = Rnd
Debug.Print(f) ' 0.533424

f = Rnd(0)
Debug.Print(f) ' 0.533424

Randomize ステートメントを呼び出すと乱数が変化します。

Randomize

Dim f As Single
f = Rnd
Debug.Print(f) ' 0.2098439 など
f = Rnd
Debug.Print(f) ' 0.1017115 など

Rnd に負の値を渡してシード値を指定できます。

Dim f As Single
f = Rnd(-1)
Debug.Print(f) ' 0.224007
f = Rnd
Debug.Print(f) ' 3.584582E-02

関連ページ