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

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

ナンバーズ3ボックスペア集計VBA


作成したVBAを少し詳しく説明しました。
おかしなところも有りますが?
ApplicationはWorksheetfunctionでも可能です。


集計するための元データのあるシート名 原本
集計先シート名  2桁
変数作成


集計1 3種類のペア作成 回号作成
集計2 ペアに対応する出力列検索
集計3 検索先に出力


データが無くなるまで集計2集計3実行




Sub ペア回号間隔()


 変数を宣言bx_no As Rangeはセルの位置 他は整数とする
Dim i As Long, kaigo As Long, j As Long
Dim caunter As Long, reiti As Long
Dim bx_no As Range, start As Long


 集計先シート選択する
Sheets("二桁").Select
 変数kaigo にシート原本の処理データ数を入れる。
kaigo = Worksheets("原本").Cells(1, 12).Value


 集計先セルのデータの削除する
Range("qh13:sj19,qh21:sj2000").ClearContents


 シート原本のbox欄のデータから集計先にペアを関数で3種類作る。
 データ数全部コピーする。

Range("qc21") = "=LEFT(原本!CO3,2)" '445列
Range("qd21") = "=LEFT(原本!CO3,1)&RIGHT(原本!CO3,1)" '446列
Range("qe21") = "=RIGHT(原本!CO3,2)" '447列
Range("qc21:qe21").Copy Range(Cells(22, 445), Cells(20 + kaigo, 447))


 集計開始するか、キャンセルするか選択する。
start = MsgBox("開始しますか?", vbYesNo)
If start = vbNo Then End


 処理スピード上げる為、再計算オフにする。別のVBA
Call saikeisanoff

 集計先、最初の行をこの場合は21行にする。
i = 21


 最後まで処理する 変数 i がデータ数の最後になるまで
Do Until i = kaigo + 21


 回号を計算し 間隔計算する為セルに表示する
Cells(i, 444) = i - 20

 3種類のペア集計
For j = 1 To 3 'ペアの入力


 ペア数字を変数bx_noに入れる。445列から447列
Set bx_no = Cells(i, 444 + j)


 変数bx_noの列位置を出力先として調べる qh20:sj80に00~99まで55種類前もって表示
reiti = Range("qh20:sj20").Find(bx_no).Column
 
 集計先の行と列の集計量を計算し出力先をcaunterに調整設定する
caunter = Application.CountA(Range(Cells(21, reiti), Cells(500, reiti))) '当選回数


 出現数として19行に表示
Cells(19, reiti) = caunter + 1 

 出力データが最初の時は、該当列位置521行21行1021行に出力
If caunter = 0 Then '最初の出力

Cells(521, reiti) = Cells(i, 444) '当選回号

Cells(21, reiti) = Cells(i, 444) '当選間隔

Cells(1021, reiti) = Sheets("原本").Cells(i - 18, 4) '当選番号

 2回以上の場合はcaunterの値で出力先行を計算し出力
Else '次回以降の出力

Cells(521 + caunter, reiti) = Cells(i, 444) '当選回号


(当選間隔も計算出力)
Cells(21 + caunter, reiti) = Abs(Cells(520 + caunter, reiti) - Cells(521 + caunter, reiti))

Cells(1021 + caunter, reiti) = Sheets("原本").Cells(i - 18, 4) '当選番号

End If

 最大ハマリ、平均出現確率、現状ハマリ計算出力する
Cells(18, reiti) = Application.Max(Range(Cells(21, reiti), Cells(500, reiti))) '最大ハマリ
Cells(17, reiti) = Application.Average(Range(Cells(21, reiti), Cells(500, reiti))) '平均出現確率
Cells(16, reiti) = kaigo - Cells(i, 444) '現状ハマリ

Next j

 これは無くてもOK
caunter = 0


 データ処理行を1行づつ増やして行く
i = i + 1


Loop

 再計算するVBA
Call saikeisanon
 計算終了後の集計先セルを選択する
Range("qg21").Select

End Sub






Call saikeisanoffとCall saikeisanonは