趣味のエクセルで当てよう!ロト・ナンバーズ

当選狙いで、ナンバーズ4をメインにロト、ビンゴ5などの各種データリストや、それらの分析用エクセルVBAなどについて書いてます。

エクセルマクロの配列研究 2


前回の「エクセルマクロの配列研究 1」 をもっとシンプルにして、さらに間隔等も計算して見ました。エクセルマクロの配列研究 1 - 趣味のエクセルで当てよう!ロト・ナンバーズ


上の様に出現間隔、件数、などを出して見ました。
F列の0~9までの5828回分の集計(H列0 Q列9で出力)


処理時間もほぼ同じでした。(core-i7-8550u ノートPCで測定)


Sub データ() ’思考錯誤中のテストマクロを改良したマクロ
Dim allmydataArr As Variant
allmydataArr = Range("a1").CurrentRegion.Value
Range("h2:q2004").Clear


Dim starttime As Single, stoptime As Single
starttime = Timer’処理時間測定開始


Dim i As Long, j As Long, ms As Long, gok(27, 2000) As Long, gokk(27, 2000) As Long
Dim r As Long, s As Long, t(9) As Long, k(9) As Long


For i = LBound(allmydataArr, 1) To UBound(allmydataArr, 1)
ms = allmydataArr(i, 6)


Select Case ms '各回号を集計0~9に対応して


Case 0: k(0) = k(0) + 1: gok(0, k(0)) = allmydataArr(i, 1): t(0) = gok(0, k(0))
Case 1: k(1) = k(1) + 1: gok(1, k(1)) = allmydataArr(i, 1): t(1) = gok(1, k(1))
Case 2: k(2) = k(2) + 1: gok(2, k(2)) = allmydataArr(i, 1): t(2) = gok(2, k(2))
Case 3: k(3) = k(3) + 1: gok(3, k(3)) = allmydataArr(i, 1): t(3) = gok(3, k(3))
Case 4: k(4) = k(4) + 1: gok(4, k(4)) = allmydataArr(i, 1): t(4) = gok(4, k(4))
Case 5: k(5) = k(5) + 1: gok(5, k(5)) = allmydataArr(i, 1): t(5) = gok(5, k(5))
Case 6: k(6) = k(6) + 1: gok(6, k(6)) = allmydataArr(i, 1): t(6) = gok(6, k(6))
Case 7: k(7) = k(7) + 1: gok(7, k(7)) = allmydataArr(i, 1): t(7) = gok(7, k(7))
Case 8: k(8) = k(8) + 1: gok(8, k(8)) = allmydataArr(i, 1): t(8) = gok(8, k(8))
Case 9: k(9) = k(9) + 1: gok(9, k(9)) = allmydataArr(i, 1): t(9) = gok(9, k(9))


End Select
Next i


For s = 0 To 9 '回号から間隔にする
 For j = 1 To k(s)
  If j = 1 Then
   gokk(s, j) = gok(s, j)
  Else
   gokk(s, j) = gok(s, j) - gok(s, j - 1)
  End If
 Next j
Next s
-----------↑↑↑↑↑↑↑↑↑↑↑-----ここまでメモリーで処理-----↑↑↑↑↑↑↑↑↑↑--------


For s = 0 To 9 '間隔などをシートに出力
For jj = k(s) To 1 Step -1
 Cells(2001 - jj, 8 + s) = gokk(s, k(s) - jj + 1)
Next jj
Cells(2001, s + 8) = k(s) '各出現回数をシートに出力
Cells(2002, s + 8) = UBound(allmydataArr, 1) - t(s) '現在の休み間隔
Cells(2004, s + 8) = t(s) '最終出現回号
Next s


stoptime = Timer ’処理時間測定終了
MsgBox "件数は" & k(1) & " 時間は" & Round(stoptime - starttime, 4)



End Sub