趣味のエクセルマクロ&数字選択式宝くじ

ナンバーズ4などの数字選択式宝くじデータ分析用の自作マクロおよびナンバーズ4などの各種データリストなどをブログにしています。

BINGO 5 パターン表 2

ホットナンバー赤色表示マクロ

赤色でホットナンバーも表示して見ました。(ビンゴ5は同じ番号が出る傾向が強い)


<< ホットナンバーは出現間隔が3以下で最低3回以上出現した時としています。>>
(確率上間隔2回以下が良いかも知れません、その場合はマクロを修正します)


数字を表示させる時にはホットナンバーマクロは動きませんが、●で表示させた後なら
数字も赤色の書式のままで表示されます。


マクロはパターン表1のマクロに今回はホットナンバー表示マクロを追加しました。



ユーザーホームは変更なしです。(パターン表1を参照してください)


おかしいところもありますが、順次修正予定です。



Public pata As String
Public pata_f As Integer
Public hit(1000, 8) As Integer
Dim colohani As Object
----------------------------------------
Sub bing5_patn() '当選数字パターン貼付け
saikeisanoff


Erase hit: pata_f = 0: pata = ""
 UserForm1.Show 'ユーザーホームを開く
    i = 4
Do Until Cells(i, 2) = ""
    For j = 1 To 8
        hit(i - 3, j) = Cells(i, j + 1)
    Next j
  
    If i = 300 Then Exit Do
     i = i + 1
    k = i
Loop


   For i = 1 To k - 4
        For j = 1 To 8
         If pata_f = 1 Then
                     
             Cells(i + 3, 10 + hit(i, j)) = hit(i, j)
          Else
                 
            Cells(i + 3, 10 + hit(i, j)) = pata
          End If
      
        Next j
    Next i
    Call renpata
    Call bingo5_hotno ’ホットナンバー赤色付
    saikeisanon
End Sub


--------------------
Sub renpata() '連番数字
i = 4
Do Until Cells(i, 2) = ""
    For k = 1 To 7
      
    If hit(i - 3, k) - hit(i - 3, k + 1) = -1 Then
         karaiti = Cells(i, k + 1) + 10
    Set colohan = Application.Union(Range(Cells(i, k + 1), Cells(i, k + 2)), Range(Cells(i, karaiti), Cells(i, karaiti + 1)))
       colohan.Interior.ColorIndex = 35
    End If
  Next k
    
     If hit(i - 3, 1) = 1 And hit(i - 3, 8) = 40 Then
        Set colohani = Application.Union(Cells(i, 2), Cells(i, 9), Cells(i, 11), Cells(i, 50))
       colohani.Interior.ColorIndex = 35
     End If
               
      If i = 1000 Then Exit Do
      i = i + 1
  Loop
  Range(Cells(i, k), Cells(i, k + 1)).Select
End Sub


--------------------------
Sub bingo5_hotno() ’ホットナンバー赤色付 (追加分)


For y = 11 To 51
i = 4
Do Until Cells(i, 2) = ""
If Cells(i, y) = "" Then
   Cells(i + 1, y).Select
 Else
    Cells(i, y).Select
     retu = ActiveCell.Column
     gyou = ActiveCell.Row
     gyoupoint = gyou
 
    If Cells(gyou, retu) = "●" Then
      For ii = 1 To 4
            Cells(gyou + ii, retu).Select
         j = ii
         If Cells(gyou + j, retu) = "●" Then Exit For
     Next ii
     
        If Cells(gyou + j, retu) = "●" And WorksheetFunction.CountIf(Range(Cells(gyou + j, retu), Cells(gyou + j + 4, retu)), "●") >= 2 Then
       
         Cells(gyoupoint, retu).Select
         入力赤丸
        End If
    End If
  End If
      i = i + 1
   Loop
 Next y
End Sub


------------------------ 
 Sub 入力赤丸()
Dim maruiti As Object
   retu = ActiveCell.Column
    gyou = ActiveCell.Row
   
 Set maruiti = Application.Cells(gyou, retu)
  Cells(gyou + 1, retu).Select
          jj = 1
   If Cells(gyou + jj, retu) <> "●" Then
     
     Do Until Cells(gyou + jj, retu) = "●"
    
      If jj > 3 Then Exit Do
      jj = jj + 1
    Loop
   
  End If
    Cells(gyou + jj, retu).Select
    maruiti.Font.Underline = xlUnderlineStyleSingle
    maruiti.Font.Color = -16776961
   
   If Cells(gyou + jj, retu) <> "●" Then Exit Sub
 入力赤丸
 End Sub
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
  Sub saikeisanoff()
    With Application
            .Calculation = xlManual
            .MaxChange = 0.001
        End With
        ActiveWorkbook.PrecisionAsDisplayed = False
    End Sub


------------------------------
    Sub saikeisanon()
     With Application
            .Calculation = xlAutomatic
            .MaxChange = 0.001
        End With
        ActiveWorkbook.PrecisionAsDisplayed = True
    End Sub


ホットナンバーの間隔2以下とした場合、マクロ修正します。
あらかじめ変化させる部分を定数にしたのが良いかも知れませんが?


Sub bingo5_hotno()
For y = 11 To 51
i = 4
Do Until Cells(i, 2) = ""


If Cells(i, y) = "" Then
   Cells(i + 1, y).Select
Else
    Cells(i, y).Select
    retu = ActiveCell.Column
     gyou = ActiveCell.Row
     gyoupoint = gyou


    If Cells(gyou, retu) = "●" Then
   
      For ii = 1 To 3
           Cells(gyou + ii, retu).Select
       j = ii
       If Cells(gyou + j, retu) = "●" Then Exit For
    Next ii
      If Cells(gyou + j, retu) = "●" And WorksheetFunction.CountIf(Range(Cells(gyou + j, retu), Cells(gyou + j + 3, retu)), "●") >= 2 Then
   
         Cells(gyoupoint, retu).Select
         入力赤丸
  End If
    End If
  End If
   
    i = i + 1
  Loop


 Next y
End Sub


 -----------------
 Sub 入力赤丸()
Dim maruiti As Object
   retu = ActiveCell.Column
    gyou = ActiveCell.Row


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


ホットナンバー色付マクロの動きをよく見たらマクロにおかしいところがありました。
マクロの中から他のマクロを呼び出しているので矛盾があるのかも知れません?


データを上から下に向かって調べて行きますがマクロでの動きがダブっています。
だから行を戻ったりします。処理が終わった時点で位置の調整をするようにしたいです。
目的は果たしてますが、無駄な動きをしていますね。


無駄な動きをしないようにマクロを変えてみました。データ行のチェックの調整です
(今後、問題がないかテストを繰り返して行く予定)


変数の再設定(プロシジャーレベルからモジュールレベルに変更)
変数y(モジュールレベル変数に)と変数xの追加(yをxに変更)
変数yでデータ行チェックの調整をする。


Public pata As String
Public pata_f As Integer
Public hit(1000, 8) As Integer
Dim colohani As Object


Dim y As Integer ’プロシジャーレベル変数に
---------------------------------------------------------
Sub bing5_patn() '当選数字パターン貼付け
saikeisanoff


Erase hit: pata_f = 0: pata = ""
 UserForm1.Show 'ユーザーホームを開く


    i = 4
Do Until Cells(i, 2) = ""
    For j = 1 To 8
        hit(i - 3, j) = Cells(i, j + 1)
    Next j
  
    If i = 300 Then Exit Do
     i = i + 1
    k = i
Loop


   For i = 1 To k - 4
        For j = 1 To 8
         If pata_f = 1 Then
              
             Cells(i + 3, 10 + hit(i, j)) = hit(i, j)
          Else
            Cells(i + 3, 10 + hit(i, j)) = pata
        
          End If
         Next j
    Next i


   Call renpata
   Call bingo5_hotno
    saikeisanon
End Sub
-------------------------------
Sub renpata() '連番数字
i = 4
Do Until Cells(i, 2) = ""
    For k = 1 To 7
    If hit(i - 3, k) - hit(i - 3, k + 1) = -1 Then
         karaiti = Cells(i, k + 1) + 10
    Set colohan = Application.Union(Range(Cells(i, k + 1), Cells(i, k + 2)), Range(Cells(i, karaiti), Cells(i, karaiti + 1)))
           colohan.Interior.ColorIndex = 35
  
     End If
    Next k
   
      If hit(i - 3, 1) = 1 And hit(i - 3, 8) = 40 Then
         Set colohani = Application.Union(Cells(i, 2), Cells(i, 9), Cells(i, 11), Cells(i, 50))
       colohani.Interior.ColorIndex = 35
      End If
               
    If i = 1000 Then Exit Do
     i = i + 1
  
Loop
 Range(Cells(i, k), Cells(i, k + 1)).Select
End Sub


 ---------------------------------               
    Sub saikeisanoff()
    With Application
            .Calculation = xlManual
            .MaxChange = 0.001
        End With
        ActiveWorkbook.PrecisionAsDisplayed = False
               
    End Sub
---------------------------------
    Sub saikeisanon()
     With Application
            .Calculation = xlAutomatic
            .MaxChange = 0.001
        End With
        ActiveWorkbook.PrecisionAsDisplayed = True
    End Sub
------------------------------
Sub bingo5_hotno() ’ホットナンバー部のチェックをする


For x = 11 To 50
y = 4
Do Until Cells(y, 2) = ""
If Cells(y, x) = "" Then
   Cells(y + 1, x).Select
  
  Else
    Cells(y, x).Select
    retu = ActiveCell.Column
     gyou = ActiveCell.Row
     gyoupoint = gyou
    If Cells(gyou, retu) = "●" Then
       For ii = 1 To 3
         Cells(gyou + ii, retu).Select
        j = ii
        If Cells(gyou + j, retu) = "●" Then Exit For
             y = y + 1 'データ行チェックの調整
       Next ii
     
        If Cells(gyou + j, retu) = "●" And WorksheetFunction.CountIf(Range(Cells(gyou + j, retu), Cells(gyou + j + 3, retu)), "●") >= 2 Then
       
          y = y - 2 'データ行チェックの調整
       
         Cells(gyoupoint, retu).Select
         入力赤丸 ’ホットナンバー部を赤色等にするマクロ
        End If
    End If
  End If
       y = y + 1
  Loop
 Next x
End Sub


--------------------------
 Sub 入力赤丸() ’ホットナンバー部を赤色等にするマクロ
Dim maruiti As Object


    retu = ActiveCell.Column
    gyou = ActiveCell.Row
   
 Set maruiti = Application.Cells(gyou, retu)


         jj = 1
   If Cells(gyou + jj, retu) <> "●" Then
   
     Do Until Cells(gyou + jj, retu) = "●"
    
      If jj > 2 Then Exit Do
     jj = jj + 1
    Loop
   
  End If
    Cells(gyou + jj, retu).Select
    maruiti.Font.Underline = xlUnderlineStyleSingle
    maruiti.Font.Color = -16776961
   
   y = y + jj 'データ行チェックの調整
   
  If Cells(gyou + jj, retu) <> "●" Then Exit Sub
 入力赤丸
  End Sub