may the VBA be with you

Excel VBAとか業務自動化とか

VBAを使ってロト6のデータを形にする その1

はじめに

先日、新人個人事業主として、税務署主催の青色申告説明会というものに行ってきました。

大変暇な思索にふける時間に富んだ内容でしたので、以前知人から相談された内容についてずっと考えてました。


それは

VBAを使ってロト6を当てられないのか

ムリでしょ

というもの。



ただ、Excel VBAは統計を取るには大変便利です。

どういう情報をどうやって取るかなーと考えるのは結構面白いです。


どんなデータをとるか

とりあえず統計的に意味がありそうな

  • それぞれの数字の当選回数
  • どれだけ連続で外れているか

あたりをやってみましょう。

「結果」シート

6個の当り数字、ボーナス数字を一覧にしたシートです。

f:id:vba-belle-equipe:20161208145251p:plain

「メイン」シート

対象の回範囲を設定して、それぞれの数字の当り回数を表示させます。

f:id:vba-belle-equipe:20161208145242p:plain

書いてみる

コード

実際に書いて実行してみます。

Sub 更新()
  Dim startnum As Long, endnum As Long
  Dim i As Long, j As Long
  Dim hit(1 To 43) As Long
  Dim num As Long
  
  With Sheets("メイン")
    startnum = .Range("C1")
    endnum = .Range("C2")
    .Range("C3") = endnum - startnum + 1
  End With
  
  With Sheets("結果")
    For i = startnum + 1 To endnum + 1
      For j = 2 To 7
        num = .Cells(i, j)
        hit(num) = hit(num) + 1
      Next j
    Next i

  End With

  With Sheets("メイン")
    For i = 6 To 48
      .Cells(i, 3) = hit(i - 5)
    Next
  End With
End Sub

ポイント

43個の数字の結果をそれぞれカウントしたいので、配列を

Dim hit(1 To 43) As Long

で作っています。

これにより、1の結果は「hit(1)」、43の結果は「hit(43)」でOK!

結果

f:id:vba-belle-equipe:20161208150231p:plain

こんな感じで、1から43までの当り回数をカウントできました。

※ウインドウ枠を固定しているので、一部が表示されています