【ExcelVBA・マクロ】Rnd関数の使い方|乱数(Randomize)を生成する方法と実務活用【コピペOK】

Rnd関数の使い方 ExcelVBA

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でできることが大きく広がります。
特にデータ生成や抽選処理では非常に便利なので、ぜひ活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました