ExcelVBA(マクロ)でランダムな数(乱数)を作る方法/Rnd、Randomizeの使い方

luck IT

Rnd関数を使うことで、VBA内で乱数を発生させることができます。

スポンサーリンク

Rnd関数の使い方

乱数の作成
Rnd(数値)
※作成される数値は0以上1未満
※数値を省略、または0より大きい数値の場合、実行する度にちがう数となる
※数値が0の場合は直前に生成した乱数と同じ数値を返す
-の場合は何度実行しても数値ごとに決まった同じ数値を返す

引数が0より大きい場合

単純に乱数作りたいだけであれば、Rndと書くだけでOKです。

rnd1
まずrndの後に0より大きい数字を入れて、MsgBoxで結果を表示してみます。小数でもOKです。
rnd2
すると毎回このように、
rnd3
0以上1未満のランダムな数値(乱数)が表示されます。
rnd4
数字の大きさは関係なく、0より大きければ全て同様に挙動します。
rnd5
また、数値を省略した場合も同様に毎回ちがう乱数を作成します。

引数が0、マイナスの数の場合

rnd6
引数が0でRndメソッドを実行すると、前回Rndで表示したのと同じ数を表示します。
rnd7
数値がマイナスの場合は、数値ごとに固定された数が出ます。同じ数値であれば何回実行しても同じ数です。
rnd8
数値が変わればちがう乱数が表示されます。
rnd9
ここからまた数値を0にすると、やっぱり前回と同じ数値が出ます。

Randomizeステートメント

シード値を更新
Randomize(数値)
※数値を省略した場合、現在時刻をTimer関数で取得して使用する
' vba
Randomize
ActiveCell.Value = Rnd
ここまでは省略していますが、Rnd関数を使う時は、基本的にRandmizeステートメントをその前に付けます。数値は勝手に入るので省略してOKです。
Randmizeはシード値を更新する命令で、シード値は乱数を生成する元となる数値です。シード値が同じであれば、Rndは同じ乱数テーブルを繰り返します。
randomize1
例として、まずブックを開き、
' vba
ActiveCell.Value = Rnd
Randomizeを使用しないで、Rnd関数をセルに代入するマクロを実行します。
randomize2
A5まで繰り返し、
randomize3
上書き保存して、一度ブックを閉じます。
randomize5
もう一回同じブックを開き、今度はB1からB5まで同じマクロを実行します。
randomize4
シード値は更新されておらず、ブックを開き直したので、同じ乱数テーブルが繰り返されます。
こういうことが起きないようにするのがRandomizeの役目です。

指定した範囲内の数字を求める方法

excel vba rnd
たとえば3~10の整数をランダムに求める場合、
' vba
Randomize
Range("A1").Value = Int(8 * Rnd + 3)
コードはこうなります。
Int(m * Rnd + n)で、数字nから(n+m-1)までの整数を求めることができます。
Excel(エクセル):ランダム、乱数
Excelの乱数、ランダム関連操作、関数等まとめです。 乱数の作成 関数で乱数を求める場合、Rand関数(0~1の乱数)またはRandBetween関数(指定範囲の整数)を用います。 もしビンゴで使うような重複...
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント