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

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

マクロ作成方法 5(N4ペア条件(重複無)を考える)



ナンバーズ4の重複無ペア集計の場合(表1)から(表2)の出目関係が分かりました。


この条件をもとにマクロを作れば良いと思います。


(表2)では千百桁の似た条件で並びかえています。



このように、データ条件の分析して整理出来ればマクロは作れます。



シングル(ボックス昇順並び替え後)の場合は1<2<3<4の条件になります。



1<2<3<4 は 1<>2<>3<>4でも良いと思います。


(<>は等しくないと言うことです)



全部のパターンでの共通部分は出目(1)と出目(2)からの計算とします。


それ以外は出目(1)から出目(4)の出目関係から条件式を作成します。


出目の位置を間違えると正しい計算は出来ないです。


( 例 1123の23部は出目3  deme(3)と出目4 deme(4)です  )






下のマクロで1回から4864回の累計計算から上の様な結果を得ました。


もっと簡単にマクロは出来そうですが?


その場合は違うアイデアを考える必要がありますね。





Sub n4bx_pea_tyono() 'ボックスペア集計 (重複なし)


Dim xa, ya, i, j, k, l, m, n, deme(4), ptn As Integer


 Sheets("出現数").Select


  Range("HB5:HK14").Select
    Selection.ClearContents


i = 4


Call saikeisanoff ’再計算等をしない  マクロ作成方法  1 と同様


Do Until Sheets("ストレートパターン").Cells(i, 3) = ""


   Cells(1, 210) = Val(Left(Sheets("ストレートパターン").Cells(i, 3), 1))
   Cells(1, 211) = Val(Mid(Sheets("ストレートパターン").Cells(i, 3), 2, 1))
   Cells(1, 212) = Val(Mid(Sheets("ストレートパターン").Cells(i, 3), 3, 1))
   Cells(1, 213) = Val(Right(Sheets("ストレートパターン").Cells(i, 3), 1))
  
    Cells(1, 215) = "=small(hb1:he1, 1)"
    Cells(1, 216) = "=small(hb1:he1, 2)"
    Cells(1, 217) = "=small(hb1:he1, 3)"
    Cells(1, 218) = "=small(hb1:he1, 4)"
   
 
    
 For j = 1 To 4
     deme(j) = Cells(1, 214 + j) ’出目1~4を変数に格納
  Next j
     


   '全パターンの関係式
    
         xa = deme(1)
         ya = deme(2)
    ’deme(1)とdeme(2)で全パターン共通の計算を先にする
         Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1
 
     If deme(1) <> deme(2) Then  '各パターンの関係式
    
        If deme(2) <> deme(3) And deme(3) <> deme(4) Then
               
            ptn = 10 'シングルの時
           
        ElseIf deme(2) <> deme(3) And deme(3) = deme(4) Then
               
            ptn = 23 'ダブル1233の時
                 
        ElseIf deme(2) = deme(3) And deme(3) <> deme(4) Then
             
            ptn = 22 'ダブル1223の時
           
        ElseIf deme(2) = deme(3) And deme(3) = deme(4) Then
       
            ptn = 31 'トリプル  1222
      
        End If
       
     ElseIf deme(1) = deme(2) Then  '各パターンの関係式
    
          If deme(2) = deme(3) And deme(3) = deme(4) Then
               
            ptn = 0 'フォース 1111
            
         ElseIf deme(2) = deme(3) And deme(3) <> deme(4) Then
               
            ptn = 31 'トリプル 1112
           
         ElseIf deme(2) <> deme(3) And deme(3) <> deme(4) Then
               
            ptn = 21 ' ダブル1123
           
          ElseIf deme(2) <> deme(3) And deme(3) = deme(4) Then
               
            ptn = 24 ' ダブルダブル 12,22
     
         End If
    
    End If
  


  Select Case ptn  '各当選番号パターンからの計算
  
      Case 10  'シングル1234の時
   
          For k = 1 To 2  '出目13,14
  
           xa = deme(1)
           ya = deme(k + 2)
     
           Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1
  
          Next k
   
         For l = 2 To 3  '出目23,24
   
            xa = deme(2)
            ya = deme(l + 1)


            Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1
  
          Next l
  
            xa = deme(3)  '出目34
            ya = deme(4)
  
           Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1
      
      
      Case 21    'ダブル1123の時
      
         For k = 3 To 4  '出目13,14
  
          xa = deme(1)
          ya = deme(k)
     
          Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1
  
         Next k
      
           xa = deme(3)  '出目23
           ya = deme(4)
  
           Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1
   
    
    Case 22 'ダブル1223の時
   
       xa = deme(1)
       ya = deme(4)
  
       Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1
   
        For k = 3 To 4 '出目23,24
  
          xa = deme(2)
          ya = deme(k)
     
          Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1
  
       Next k
      
    Case 23  'ダブル1233の時
     
        xa = deme(1)
        ya = deme(3)
  
       Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1
   
            
        For l = 1 To 2  '出目23,34
             xa = deme(l + 1)
             ya = deme(l + 2)
     
          Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1
        
        Next l
        
    Case 24 'ダブルダブル1122の時
      
      
         For k = 1 To 2  '出目23 34
      
             xa = deme(k + 1)
             ya = deme(k + 2)
     
          Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1
  
         Next k
      
        
     Case 31 'トリプル1およびトリプル2の時
          xa = deme(3)
          ya = deme(4)
     
          Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1
      
   End Select


i = i + 1


Loop


Call saikeisanon


Cells(3, 210) = i - 4 & " 回"
Cells(1, 210).Select


End Sub




---------------------------------------------------------------------------
      
        xa = deme(3)
           ya = deme(4)
           Cells(xa + 5, 210 + ya) = Cells(xa + 5, 210 + ya) + 1


        上の式 xa ya を下の様に直接式にしても良いと思います。


     Cells( deme(3) + 5, 210 + deme(4)) = Cells( deme(3) + 5, 210 + deme(4)) + 1




集計は全当選番号なので、あまり差が無くて参考にはならない気がします。


直近の100回分とかで集計したら何かが見える様な感じもします。


その場合は開始位置のマクロを修正して行けば良いですね。