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

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

Rnd関数の使い方

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

引数は数値で省略可です。値によって、乱数の作成方法が異なります。

  • <0 引数のシード値によって決まる同じ数値を返します。
  • >0 乱数系列※(乱数ジェネレータとも言う)の次の乱数を返します。
  • =0 直前に生成した乱数を返します。
  • 省略時 乱数系列の次の乱数を発生させます。

※乱数系列とは、VBAが作成する乱数のセットで、Rnd関数を実行するとこのセットから乱数を出力します。

独立した乱数(前回の結果を引きずらない乱数)を発生させたいのであれば、Randomizeステートメント+Rnd(引数省略)でひとまずOKです。(Randomizeステートメントは、乱数系列をリセットします)。下記に例を示します。

  1. i,jを定義して、セルの範囲を指定する。
  2. 指定したセルにRnd関数で乱数を発生させる。(繰り返す際にRandomizeで系列を初期化)

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

[実行結果]Rnd1

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

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

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回発生させています。

  1. jを定義して発生させるセルを指定する。
  2. 指定したセルにint関数で乱数を生成する。(繰り返す際にRandomizeで系列を初期化)

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

[実行結果]Rnd2

使用例

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

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

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

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


Welcome to UX MILK

UX MILKはより良いサービスやプロダクトを作りたい人のためのメディアです。

このサイトについて

UX MILKのディレクター募集