【VBA】乱数(Rnd)の使い方!ランダムな数値を生成して処理に変化を持たせる方法
プログラムの中で、実行するたびに異なる数値を使いたい場面があります。VBAでは Rnd関数 を使うことで、0以上1未満の乱数を発生させることができます。ゲームの要素だけでなく、データのサンプリングやテストデータの自動生成など、実務でも幅広く活用される機能です。
1. 基本文法:Randomize と Rnd
乱数を使用する際は、必ず Randomize ステートメントを先に実行するのが鉄則です。これを行わないと、マクロを起動し直した際に「毎回同じパターンの乱数」が発生してしまい、本当の意味でのランダムになりません。
乱数ジェネレータをシステムタイマーの値で初期化します。
Rnd()
0以上、1未満の範囲(0.000... ~ 0.999...)の小数を返します。
2. 実践サンプル:乱数の発生と出力
ポイント:実行前に必ず「Randomize」で初期化する
最もシンプルな、0から1の間の小数をイミディエイトウィンドウに出力するコードです。
' 乱数系列を初期化(これ重要!)
Randomize
' 0以上1未満の乱数を発生させて出力
Debug.Print Rnd()
End Sub
3. 実行結果
実行するたびに、以下のようなランダムな小数が出力されます。
0.533424
0.2869222
4. エンジニアの視点:実務で使える「整数の乱数」の作り方
1. 範囲指定のテクニック: 実務では「1から100までの整数」が欲しい場合が多いです。その場合は、以下の公式を使います。
Int((最大値 - 最小値 + 1) * Rnd + 最小値)
例えば1〜100なら、Int(100 * Rnd + 1) と記述すればOKです。
2. Randomizeのタイミング: Randomize は一つのマクロ処理の中で一度だけ実行すれば十分です。ループの中で何度も実行すると、逆にランダム性が損なわれることがあるため注意しましょう。
3. 再現性の確保: あえて Randomize を使わずに、Rnd(-1) などの引数を与えて「決まったパターンの乱数」を出すこともあります。これはデバッグ時に「前回と同じ乱数でバグを再現したい」といった場合に役立つ「いけいけ」な高等テクニックです。
5. まとめ
「まずは Randomize、次に Rnd」。このセットを覚えるだけで、VBAに「偶然」の要素を取り込むことができます。データのシャッフルや抽選ツールなど、乱数を使いこなして一味違うツール作成に挑戦してみてください。