コインを10回投げて、表(head)と裏(tail)の出た回数を表示するマクロを作りながら、Select Caseステートメントと乱数の基本について学びます。
【VBA】コイン投げて表と裏の出た回数を表示するマクロ
Select Caseステートメントを使ってマクロを書いてみました。Ifステートメントを使ってもほぼ同じ内容になります。頭に「’」が付いた赤い文字は補足コメントなので、プログラムに影響しません。
'[VBA] コインを投げて表と裏の出た回数を表示するコード
Sub Coin()
Randomize
Dim r As Double
Dim i As Integer
Dim head As Integer, tail As Integer
For i = 1 To 10
'乱数を変数rに格納
r = Rnd
'乱数rについて場合分け
Select Case r
'乱数rが0.5より小さい場合
Case Is < 0.5
head = head + 1
'それ以外の場合
Case Else
tail = tail + 1
End Select
Next i
Debug.Print "表は" & head & "回です"
Debug.Print "裏は" & tail & "回です"
End Sub
Coin() を実行すると、イミディエイトウィンドウに
「表は X 回です、裏が Y 回です」
と表示されます。X と Y の部分は実行するたびに値が変わりますが、必ず X + Y = 10 となっています。
2行目にある Randomize という記述は、乱数テーブルを初期化するものです。詳しく解説すると長くなってしまうので、ここでは割愛します。「Rnd 関数を使うときには必ず最初にこの一文を入れる」ということだけ覚えておいてください。
Rnd関数は 0 から 1 の乱数を発生させます。
r = Rnd
として r に乱数を入れています。
Select Case は条件分枝のためのステートメントです。
Select Case [変数] Case Is [条件1] [処理1] Case Is [条件2] [処理2] Case Else [処理3] End Select
という形式で記述しますが、[条件] のところで変数を省略します。 Ifステートメントを2回使わなければならないようなときに、片方を Select Caseステートメントで記述することで、マクロを読みやすくするなどのメリットがあります。さて「コイン投げマクロ」では
Select Case r Case Is < 0.5 head = head + 1 Case Else tail = tail + 1 End Select
となっています。の最初のところで r を指定しているので、[条件] のところは「< 0.5」と書きます。「発生した乱数が 0.5 より小さい値」という条件は「確率 50%」と同値です。そのときに表 (head) の出る回数に 1 を加えます。
【次の記事】≫ ユーザーフォームの作成方法
エクセルや数学に関するコメントをお寄せください