【VBA】Rnd関数で0から9までの乱数を取得する方法

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だけの乱数だけ使うケースは稀だと思うので、こちらを使用してみてください。

Randomizeステートメントについて

    Randomize '乱数のシード値を変更

どちらのプログラムも最初にRandomizeステートメントを記載しています。

あまり深く考えず、Rnd関数を使う場合は最初にこのステートメントを記載するようにしてください。

理由を軽く説明すると、Rnd関数は乱数を返すのですが、シード値というものをベースに乱数を生成しています。

そのため、このシード値が同じだと全く同じ順番で乱数が作られてしまいます。

Randomizeステートメントは時刻を利用してシード値を変更する命令で、これを冒頭に入れることで毎回異なった乱数を得ることができます。

《VBA中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2022/08/08 12:24:02時点 Amazon調べ-詳細)

《マクロ作成に困ったら》
自分で作るのが難しいと感じたら、プロに作ってもらう手もあります。
マクロ(VBA)の依頼におすすめのプログラマーを紹介の記事をご覧ください。

他の「VBA」の記事はこちらからどうぞ

VBA

Posted by やろまい