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

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

仕組を考える(ホットナンバー)


マクロを考える前に仕組みを考える必要があります。


仕組が考えられなければ、マクロは作れないような気がするからです。


(私はなかなか作れなかったのでw)





ホットナンバーを判断するマクロを仕組から考えるとしたら?


ホットナンバーの定義は?


下のように 「出現間隔3以下で出現が3個以上」  とした場合。



上のことから ホットナンバーの基本形は下の様に16種類になります。


これの後に同じように繰り返しでホットナンバー出現が増えて行く事があります。


ここで0は次回休みなく出た場合を表します。


             (実際の出現を基本形から見た場合)



16種類を判断してマクロでホットナンバー処理をすれば良いわけですが?


16種類の判断は難しい気がします。


16種類の判断はいらない!


なぜなら、次回が3回以内に出たかを判断すれば良いから



だからホットナンバー基本形を判定する下の「仕組」を考えて行きます。


1. 4回以上休んでいるか?休んでいたなら


2. 次の休み間隔を調べて3回以内なら


3. 次の次の間隔が3回以内か?


上の3条件が満たされたならホットナンバーとします。


実際にはたとえば3回休みはマクロの計算上4回にしています(0~3にすべて+1)


1~3の条件はすべてマクロで出来ますね。


1の時 IFで判断
2の時 For Next で判断
3の時 Countif関数で判断


なぜ For Next を使うかと言うと、次のセルの位置を知るためです。


そこで分かったセルの位置から次の間隔内の個数をCountif関数で計算するためです。



いずれもホットナンバーと判定する仕組になると思います。



ホットナンバーとなってる場合の個数が4個以上の場合もあるので


入力赤丸マクロで間隔が4以上になるまで赤丸の処理をする。



下のマクロで最初の間隔4以上は判断していませんが、マクロでホットナンバーと判断しなければ赤丸にはしません。判断した場合3個以上にたいして赤丸にする。


  最初の間隔4以上を判断する場合は 
    If Cells(gyou, retu) = "●" Then を
   If Cells(gyou - 1, retu) >= 4 And Cells(gyou, retu) = "●" Then にします。


 Sub ホットナンバーchk() ’ナンバーズ4でのホットナンバーチェック
 
  Sheets("ストレートパターン").Select
    retu = ActiveCell.Column
    gyou = ActiveCell.Row
    gyoupoint = gyou
   
    If Cells(gyou, retu) = "●" Then
          ' If Cells(gyou - 1, retu) >= 4 And Cells(gyou, retu) = "●" Then
      For i = 1 To 4 ’次の間隔が3以内かを調べる
     
       Cells(gyou + i, retu).Select
       j = i
       If Cells(gyou + j, retu) = "●" Then Exit For 
      
      Next i
     
        If Cells(gyou + j, retu) = "●" And WorksheetFunction.CountIf(Range(Cells(gyou + j, retu), Cells(gyou + j + 4, retu)), "●") >= 2 Then ’次の次の間隔が3回以内か調べる
 
         Cells(gyoupoint, retu).Select ’ホットナンバーの最初の場所選択する
         入力赤丸 ’3個以上の場合でもホットナンバーに赤丸にする
       
        Else
                   End
        End If
    End If


 End Sub
------------------------------------------------ 

Sub 入力赤丸() ’3個以上の場合でもホットナンバーに赤丸にする
Dim maruiti As Object
 Sheets("ストレートパターン").Select
   retu = ActiveCell.Column
    gyou = ActiveCell.Row


 Set maruiti = Application.Cells(gyou, retu)
  Cells(gyou + 1, retu).Select
 
         j = 1
   If Cells(gyou + j, retu) <> "●" Then
  
     Do Until Cells(gyou + j, retu) = "●"
   
      If j > 3 Then Exit Do
      j = j + 1
    Loop
   
  End If
    Cells(gyou + j, retu).Select
    maruiti.Font.Underline = xlUnderlineStyleSingle
    maruiti.Font.Color = -16776961
   
   If Cells(gyou + j, retu) <> "●" Then End
入力赤丸
   
End Sub


上のマクロは数千行のデータを処理するマクロではありませんが?


数千行のデータの処理は 「ロト6ホットナンバー表示マクロ(案)」
を参照してください。


「マクロ学習法とは4(仕組作り)」にも仕組について書いてます。



「マクロはアイデア?」も仕組づくりに通じる気がします。