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

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

ナンバーズ4 表裏ペアと合計

記事目次 ナンバーズ4


・タイプ別分類





・表裏ペアと出目合計の関係
 (1万通りの4630通りに表裏ペア有り)




・1万通りの 合計と表裏ペア有り割合 





・合計と表裏ペア関係 





・各表裏ペアと合計と数量
 0516 1638 2749 等の場合の重複有 


・表裏ペアを狙う時の合計には何か有るか?
 

ナンバーズ3 の 出現タイプ(5926回)


・5926回での集計


・ダブル連続出現(①回号と②回数 最高7回)



・シングル連続出現(①回号と②回数 最高21回)

LOTO6 多重当選集計配列マクロ・テスト


記事目次 ロト・ビンゴ 


・多重当選(引っ張り)を集計する配列マクロをテスト



(表1)元データ


(表2)多重当選(黄色塗りつぶし部)



(表3)多重当選集計 (表2)より集計




マクロ処理時間約1.2秒 たまに30秒とか意味不明も?




・テストマクロ
Option Explicit
Sub loto6出目多重当選集計配列()
Range("BJ2:CZ3000").ClearContents


Dim starttime As Single, stoptime As Single
starttime = Timer


Dim i As Long, j As Long, jj As Long, gk As Long
Dim gok(43, 400) As Long, gokk(43, 400) As Long '400は集計データ数(推測)
Dim t As Long, s As Long, r As Long, n As Long
Dim k(43) As Long, tt(43) As Long
Dim tajyuu(43, 400) As Variant


Dim allmydataArr As Variant


With Application
.Calculation = xlManual
.MaxChange = 0.001
End With
ActiveWorkbook.PrecisionAsDisplayed = False
Application.ScreenUpdating = False '画面変更をしない。



allmydataArr = Range("a1").CurrentRegion.Value 'データがA1セルから入力されてる時


For i = 2 To UBound(allmydataArr, 1) '2行目~最終行まで(自動で計算される)


 For n = 2 To 8 '当選データの2~8列 (表1)元データから
  gk = allmydataArr(i, n) '出目
  k(gk) = k(gk) + 1 '該当出目データ累計数の計算
  gok(gk, k(gk)) = allmydataArr(i, 1) '該当データの回号を格納
  tt(gk) = gok(gk, k(gk)) '該当データの最終回号
  tajyuu(gk, k(gk)) = 1 ’多重計算用

 Next n
Next i



For s = 1 To 43 '回号から間隔計算 '最初と連続出現は間隔0とする (-1で計算)
 For j = 1 To k(s)
  If j = 1 Then
   gokk(s, j) = gok(s, j) - 1 '最初の回号の時


 Else
  gokk(s, j) = gok(s, j) - gok(s, j - 1) - 1

 If gokk(s, j - 1) >= 0 And gokk(s, j) = 0 Then '間隔から多重計算

  tajyuu(s, j) = tajyuu(s, j) + tajyuu(s, j - 1)
  tajyuu(s, j - 1) = ""


 End If

 End If
 Next j


Next s


For r = 1 To 43 ''多重出力(表2)


For jj = 1 To k(r)


  Cells(1 + gok(r, jj), 61 + r) = tajyuu(r, jj)


Next jj


Next r


With Application
.Calculation = xlAutomatic
.MaxChange = 0.001
End With
ActiveWorkbook.PrecisionAsDisplayed = True
Application.ScreenUpdating = True '画面変更


stoptime = Timer
MsgBox "件数は" & k(13) & " 時間は" & Round(stoptime - starttime, 4)


End Sub