Excel VBA 数学教室ではアフィリエイトプログラムを利用して商品を紹介しています。

【VBA】コイン投げシミュレーション(Head or Tail)

コインを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 を加えます。

エクセルや数学に関するコメントをお寄せください