【VBA】Rnd関数で0から9までの乱数を取得する方法(ランダム)
今回はRnd関数を用いて0から9までの乱数を取得する方法を紹介します。
【Rnd関数】0から9までの乱数を取得するプログラム
Sub RndFunction1()
'0~9までの乱数をイミディエイトウィンドウに表示
Randomize '乱数のシード値を変更
Debug.Print Int(Rnd * 10)
End Sub
このプログラムを実行すると、0~9までの乱数をイミディエイトウィンドウに表示します。
Rnd関数の仕組み
Rnd関数は、0以上1未満のランダムな小数を返します。
そのため、Rnd * 10とすると0以上10未満のランダムな小数が得られます。
さらにInt関数で小数点以下を切り捨てることによって0~9までの整数値へ変更しています。
【Rnd関数】MINからMAXまでの乱数を取得するプログラム
Sub RndFunction2()
'MIN_NUM~MAX_NUMまでの乱数をイミディエイトウィンドウに表示
Const MIN_NUM = 0
Const MAX_NUM = 9
Randomize '乱数のシード値を変更
Debug.Print Int((MAX_NUM - MIN_NUM + 1) * Rnd + MIN_NUM)
End Sub
先ほどのプログラムでは0~9の乱数が得られましたが、このプログラムはそれを拡張しています。
MIN_NUMとMAX_NUMの間の乱数を取得することができます。
0~9だけの乱数だけ使うケースは稀だと思うので、こちらを使用してみてください。
Function GetRnd(min As Long, max As Long) As Long
'min~maxまでの乱数を返す
Randomize '乱数のシード値を変更
GetRnd = Int((max - min + 1) * Rnd + min)
End Function
このようにminとmaxの値を引数とした汎用関数としておく方法もあります。
この関数はmin~maxまでの間の値をランダムで返してくれます。
Randomizeステートメントについて
Randomize '乱数のシード値を変更
どちらのプログラムも最初にRandomizeステートメントを記載しています。
あまり深く考えず、Rnd関数を使う場合は最初にこのステートメントを記載するようにしてください。
理由を軽く説明すると、Rnd関数は乱数を返すのですが、シード値というものをベースに乱数を生成しています。
そのため、このシード値が同じだと全く同じ順番で乱数が作られてしまいます。
Randomizeステートメントは時刻を利用してシード値を変更する命令で、これを冒頭に入れることで毎回異なった乱数を得ることができます。