忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【VBA】乱数(Rnd)の使い方!ランダムな数値を生成して処理に変化を持たせる方法

プログラムの中で、実行するたびに異なる数値を使いたい場面があります。VBAでは Rnd関数 を使うことで、0以上1未満の乱数を発生させることができます。ゲームの要素だけでなく、データのサンプリングやテストデータの自動生成など、実務でも幅広く活用される機能です。

1. 基本文法:Randomize と Rnd

乱数を使用する際は、必ず Randomize ステートメントを先に実行するのが鉄則です。これを行わないと、マクロを起動し直した際に「毎回同じパターンの乱数」が発生してしまい、本当の意味でのランダムになりません。

Randomize
乱数ジェネレータをシステムタイマーの値で初期化します。

Rnd()
0以上、1未満の範囲(0.000... ~ 0.999...)の小数を返します。

2. 実践サンプル:乱数の発生と出力

ポイント:実行前に必ず「Randomize」で初期化する

最もシンプルな、0から1の間の小数をイミディエイトウィンドウに出力するコードです。

Sub Macro1()
  ' 乱数系列を初期化(これ重要!)
  Randomize

  ' 0以上1未満の乱数を発生させて出力
  Debug.Print Rnd()
End Sub

3. 実行結果

実行するたびに、以下のようなランダムな小数が出力されます。

0.7055475
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に「偶然」の要素を取り込むことができます。データのシャッフルや抽選ツールなど、乱数を使いこなして一味違うツール作成に挑戦してみてください。


PR