VBAで処理をしていると、次のようなことはありませんか?
- ランダムな数値を生成したい
- くじ引きや抽選を作りたい
- テストデータを自動生成したい
このような場合は、Rnd関数を使うことで解決できます。
VBAで簡単に乱数を生成できるため、実務でも意外と活用シーンが多い関数です。
この記事では、Rnd関数の基本から実務で使える応用までを初心者向けに分かりやすく解説します。
この記事でできること
- ランダムな数値を生成できる
- 指定範囲の整数を作れる
- 乱数の注意点が分かる
- 実務で使えるコードが分かる
基本:Rnd関数の使い方
まずは一番シンプルなコードです。
Option Explicit
Sub RandomBasic()
Dim num As Double
num = Rnd
MsgBox num
End Sub
このコードで、0以上1未満のランダムな数値が生成されます。
Rnd関数の特徴
- 0以上1未満の値を返す
- 毎回違う値になる(※後述の注意あり)
整数のランダム値を作る方法
実務では整数で使うことが多いです。
1〜10のランダム数
Option Explicit
Sub RandomInteger()
Dim num As Long
Randomize
num = Int(Rnd * 10) + 1
MsgBox num
End Sub
ポイント:
- Rnd * 10 → 0〜9.999…
- Intで整数化
- +1で1〜10に調整
指定範囲の乱数を作る方法
任意の範囲で乱数を作るテンプレはこちらです。
最小値 + Int(Rnd * (最大値 - 最小値 + 1))
例:5〜20のランダム数
Dim num As Long
Randomize
num = 5 + Int(Rnd * (20 - 5 + 1))
MsgBox num
Randomizeの重要性
乱数を使うときは、必ず Randomize を実行してください。
Randomize
これを入れないと、毎回同じ値になることがあります。
セルにランダム値を入れる
Excelシートに出力する場合はこちらです。
Option Explicit
Sub RandomToCells()
Dim i As Long
Randomize
For i = 1 To 10
Cells(i, 1).Value = Int(Rnd * 100) + 1
Next i
End Sub
A列に1〜100のランダム数が入ります。
ランダムで1件選択する(くじ引き)
リストから1つ選ぶ例です。
Option Explicit
Sub RandomSelect()
Dim lastRow As Long
Dim randRow As Long
Randomize
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
randRow = Int(Rnd * lastRow) + 1
MsgBox "選ばれた値:" & Cells(randRow, 1).Value
End Sub
重複しないランダム(シャッフル)の考え方
単純なRndでは重複が発生します。
重複なしにする場合は、配列+シャッフルなどの方法を使います。
(応用編として別記事にするとSEO的に強いです)
実務での活用例
- テストデータ作成
- 抽選・ランダム選択
- 負荷テスト用の数値生成
- 順番のランダム化
意外と幅広く使える便利機能です。
よくあるエラーと対処法
① 毎回同じ値になる
Randomize を入れてください。
② 範囲がおかしい
計算式を確認してください。
Int(Rnd * (最大 - 最小 + 1)) + 最小
③ 小数が出てしまう
Int を使って整数化してください。
④ コードは正しいのにエラーになる
コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。
まとめ
- 乱数は
Rndで生成 - 整数化は
Int - 範囲指定は計算式で調整
Randomizeは必須
Rnd関数を使いこなせるようになると、VBAでできることが大きく広がります。
特にデータ生成や抽選処理では非常に便利なので、ぜひ活用してみてください。


コメント