Excel VBAで範囲を指定して乱数を生成する:Rnd,Int

Excelの作業で切っても切り離せない乱数ですが、VBAでは、Rnd関数を使用します。今回は簡単なその使い方をご紹介します。

Rnd関数の使い方

Rnd関数は、0以上1未満の乱数を返します。構文は下記です。

'乱数を発生させる
Dim i As Long, j As Long
For i = 1 To 5
    For j = 1 To 10
        Randomize               '乱数系列初期化
        Cells(i, j).Value = Rnd 'Rnd関数実行 引数なし
    Next j
Next i
  1. i,jを定義して、セルの範囲を指定する。
  2. 指定したセルにRnd関数で乱数を発生させる。(繰り返す際にRandomizeで系列を初期化)

という手順になっています。

[実行結果]Rnd1

乱数の範囲を指定する:Int

サイコロの目のように、最小値~最大値の整数値を乱数として出力させたい場合は、次のようにします。

Int((最大値-最小値+1)* Rnd +最小値))

Int関数は、指定した数値の整数部分を、小数点以下切り捨てにして返します。特に、1からある値Nまでの乱数を発生させたい場合、最小値=1ですから、

Int((N-1+1)* Rnd+1))

→ Int(N*Rnd+1)

となります。Int関数は小数点以下を切り捨てますので、例えば1~6で乱数を発生させたい場合、最後の「+1」がないと6*Rnd=5.99999…~0の中で小数点以下を切り捨ててしまうので、0~5の間で生成されてしまいます。最後の+1を忘れないようご注意ください。

下記例は、サイコロの目に見立てて1~6の乱数を20回発生させています。

Dim j As Long
For j = 1 To 20
    Randomize   '乱数系列初期化
    Cells(1, j).Value = Int(6 * Rnd + 1) '1~6で乱数生成
Next j
  1. jを定義して発生させるセルを指定する。
  2. 指定したセルにint関数で乱数を生成する。(繰り返す際にRandomizeで系列を初期化)

という手順になっています。

[実行結果]Rnd2

使用例

下記は、Select~Case文を併用して、今夜の夕食をランダムに選ぶプログラムを組みます。

Dim Dice As Integer, Menu As String
Dice = Int(3 * Rnd + 1) '1~3をランダム生成

Select Case Dice
    Case Is = 1
        Menu = "焼肉"
    Case Is = 2
        Menu = "鍋"
    Case Is = 3
        Menu = "抜き"
End Select

Debug.Print "今夜は" & Menu & "!"
  1. Int関数でDiceの数字を1~3からランダムに生成する。
  2. それぞれの数字が出た際に表示する文字を決定する。
  3. Debug.Printで表示する。

という手順になっています。

[実行結果](5回実行しています)Rnd3


イベント