VBA 数学マクロ講座 21 回目です。
前回記事 で解説した Array 関数を応用して くじ引きマクロ を作ってみます。
くじ引きマクロ
袋の中に「当たり」を1つ、「ハズレ」を3つ入れて、1/4 の確率で「当たり」を引くマクロです。
Sub くじ引き()
Dim ball As Variant
Dim rd as Integer
Randomize
ball = Array("当たり", "ハズレ", "ハズレ", "ハズレ")
rd = Int(4 * RND + 1)
MsgBox ball(rd)
End Sub
マクロを実行するとメッセージボックスに「当たり」か「ハズレ」のどちらかが表示されます。何回か試してみると「ハズレ」を引く確率が高くなっていることが分かると思います。
Variant 型変数に配列を入れます
前回説明したように
によって配列のインデックス番号の下限値を 1 に設定し、
という記述で ball(1) に「当たり」、ball(2), ball(3), ball(4) にそれぞれ「ハズレ」という文字列を入れています。
1 から 4 の乱数を発生させます
次にこのインデックス番号を無作為に選択することを考えます。端数を丸めて整数値に変える INT 関数、 0 から 1 までの乱数を発生させる RND 関数を用いると、a ~ b のランダム整数は
という記述で得られます。ですから
と書けば 1 から 4 のランダム整数を変数 rd に入れることになります。
配列データを無作為に表示します
rd には 1 から 4 までの数字が入っているので、
とすれば、「当たり」か「ハズレ」のいずれかを無作為に表示することになります。