Rnd関数を使うことで、VBA内で乱数を発生させることができます。
Rnd関数の使い方
乱数の作成
Rnd(数値)
※作成される数値は0以上1未満
※数値を省略、または0より大きい数値の場合、実行する度にちがう数となる
※数値が0の場合は直前に生成した乱数と同じ数値を返す
-の場合は何度実行しても数値ごとに決まった同じ数値を返す
Rnd(数値)
※作成される数値は0以上1未満
※数値を省略、または0より大きい数値の場合、実行する度にちがう数となる
※数値が0の場合は直前に生成した乱数と同じ数値を返す
-の場合は何度実行しても数値ごとに決まった同じ数値を返す
引数が0より大きい場合
単純に乱数作りたいだけであれば、Rndと書くだけでOKです。
まずrndの後に0より大きい数字を入れて、MsgBoxで結果を表示してみます。小数でもOKです。
すると毎回このように、
0以上1未満のランダムな数値(乱数)が表示されます。
数字の大きさは関係なく、0より大きければ全て同様に挙動します。
また、数値を省略した場合も同様に毎回ちがう乱数を作成します。
引数が0、マイナスの数の場合
引数が0でRndメソッドを実行すると、前回Rndで表示したのと同じ数を表示します。
数値がマイナスの場合は、数値ごとに固定された数が出ます。同じ数値であれば何回実行しても同じ数です。
数値が変わればちがう乱数が表示されます。
ここからまた数値を0にすると、やっぱり前回と同じ数値が出ます。
Randomizeステートメント
シード値を更新
Randomize(数値)
※数値を省略した場合、現在時刻をTimer関数で取得して使用する
Randomize(数値)
※数値を省略した場合、現在時刻をTimer関数で取得して使用する
' vba
Randomize
ActiveCell.Value = Rnd
ここまでは省略していますが、Rnd関数を使う時は、基本的にRandmizeステートメントをその前に付けます。数値は勝手に入るので省略してOKです。
Randmizeはシード値を更新する命令で、シード値は乱数を生成する元となる数値です。シード値が同じであれば、Rndは同じ乱数テーブルを繰り返します。
Randmizeはシード値を更新する命令で、シード値は乱数を生成する元となる数値です。シード値が同じであれば、Rndは同じ乱数テーブルを繰り返します。
例として、まずブックを開き、
' vba
ActiveCell.Value = Rnd
Randomizeを使用しないで、Rnd関数をセルに代入するマクロを実行します。
A5まで繰り返し、
上書き保存して、一度ブックを閉じます。
もう一回同じブックを開き、今度はB1からB5まで同じマクロを実行します。
シード値は更新されておらず、ブックを開き直したので、同じ乱数テーブルが繰り返されます。
こういうことが起きないようにするのがRandomizeの役目です。
こういうことが起きないようにするのがRandomizeの役目です。
指定した範囲内の数字を求める方法
ワークシート関数のほうのRndと同じ方法で、指定範囲内の数値を求めることができます。
たとえば3~10の整数をランダムに求める場合、
' vba
Randomize
Range("A1").Value = Int(8 * Rnd + 3)
コードはこうなります。
Int(m * Rnd + n)で、数字nから(n+m-1)までの整数を求めることができます。
Int(m * Rnd + n)で、数字nから(n+m-1)までの整数を求めることができます。
Excel(エクセル):ランダム、乱数
Excelの乱数、ランダム関連操作、関数等まとめです。
乱数の作成
関数で乱数を求める場合、Rand関数(0~1の乱数)またはRandBetween関数(指定範囲の整数)を用います。
もしビンゴで使うような重複...
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。
コメント