🍋

Excel VBA_乱数を出力する方法について(Rnd関数)

2022/12/12に公開

この記事ではExcel VBAで乱数を出力する方法について解説します。

https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/rnd-function

Rnd関数

Rnd関数は0以上1未満の乱数を返します。構文は下記の通りです。

Rnd(引数)

具体例としてセルA1~A5にランダムな小数点以下のランダムな値を出力しました。

Dim i As Long
For i = 1 To 10
Cells(i, 1).Value = Rnd
Next

Rnd関数は使用に当たってポイントが2つあります。

1、引数の値によって戻り値の値が決まる
2、「種(シード)」と呼ばれる基準値を再設定する必要がある

1、引数の値によって戻り値の値が決まる

Rnd関数は引数の値によってどのような戻り値を返すかを指定できます。

引数の値 出力される値(戻り値)
0より大きい 0以上1未満の疑似乱数
0 直前に生成した乱数の値
0より小さい 引数を乱数の種として使用し、毎回同じ値
省略した場合 0以上1未満の疑似乱数

Rnd関数が疑似乱数を生成する場合、シード値(乱数の種)と呼ばれる値を元に計算をおこないます。そしてけいさんの結果を元にランダムな値を出力しています。

2、「種(シード)」と呼ばれる基準値を再設定する必要がある

ブックを開いた時点で使用される初期シードは常に同じです。シード値が等しければ次の値も同じになるので、出力される乱数が一定の値となってしまいます(本当にランダムな値ではなく、一定のルールの元に値が出力されている点に注意が必要です。)そこでRnd関数の前にRandomizaメソッドを実行すると、乱数テーブルを初期化することができます。

Dim i As Long
For i = 1 To 10
Randomize   '乱数系列初期化
Cells(i, 1).Value = Rnd
Next

Randomizeを追記することで出力される値にバラつきを持たせることが可能となります。

指定の範囲でランダムな整数を生成

指定の範囲でランダムな整数を出力するには下記の構文を用います。

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

例えばサイコロの目のように1~6の値を出力する場合、最大値:6、最小値:1となります。

Dim i As Long
For i = 1 To 10
Randomize
Cells(i, 1).Value = Int(6 * Rnd + 1)
Next

Discussion