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

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

マクロが難しい



マクロはやさしいと言えたなら良いなと思います。


やさしいマクロを作るのはやさしいです。
やさしいマクロだけでは限界がありますが?


と言っても、難しいマクロを作るのは難しいですw


やさしい → 難しい


そこにレベルが有るだけだと思います。
まずはやさしいマクロをマスターしてからがスタートです。







その前になぜマクロを作るか?


それはマクロでデータを処理出来れば楽だからですね!


楽なうえに手作業のミスが無くなります。









マクロが中々出来ないのは


・マクロの基礎が出来てない。


・何をマクロ化するか決まっていない。


・処理をする前段階の仕組づくりが出来ないからだと思います。


・それとマクロなどのプログラムの考え方が良く分かっていない(私自身もw)


Excel VBA の 学び方 


Excel VBA 文法はわかるのにプログラムが書けない人が読む本【電子書籍】[...



マクロ内容を簡単に示すなら?


① 未処理データ ⇒ ② 未処理データの加工 ⇒ ③ 加工後のデータ


①~③の順に動いて行きます。


①~③は条件などで処理が変わって行くのだと思います。


①~③をどのような仕組づくりをしたなら良いのだろうか?


そこに試行錯誤がありますが、それがマクロを学ぶことだと思います。





下のマクロはシートへ移動するマクロで凄くやさしいです。


Sub 最後当選へ()
    Sheets("最後当選").Select
End Sub


もし、シートが何十もある場合はシートを探すよりマクロで選択したいです。



****
マクロはアイデア? 


下のナンバーズ4のマクロは難しいとは言えませんが少しややこしいかも知れないです。


変数 知らなかった本当の使い方! 


Sub patapata_4() '当選数字パターン貼付け(引張表作成)


Dim i As long, j As long, k As long, dbl As long, kaigou As long


Dim daida As String, Db As String


   start = MsgBox("開始しますか?", vbYesNo)
If start = vbNo Then End


 kaigou = Cells(1, 26)
 Range(Cells(2, 17), Cells(kaigou + 1, 17)).Select


   
    Range("BN2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
 Range("Bo2:Bz5500", "ca2:ca5500").Select
  Selection.ClearContents
 Application.ScreenUpdating = False '画面変更をしない。
Call saikeisanoff
Range("BW2").Activate


Erase hit
i = 2


Do Until Cells(i, 18) = ""
     dai = 0
    For j = 1 To 4 '出目の入力
        hit(i - 1, j) = Cells(i, j + 17)
        If hit(i - 1, j) >= 5 Then dai = dai + 1
        kiguu(j) = Cells(i, j + 21)
          If kiguu(j) = "偶" Then kiguu(j) = "▲" Else kiguu(j) = "△"
        If j = 4 Then
         Cells(i, 81) = kiguu(1) + kiguu(2) + kiguu(3) + kiguu(4)
        End If
    Next j
       
           Select Case dai '大小の表示
            Case 0: daida = "■■■■"
            Case 1: daida = "■■■□"
            Case 2: daida = "■■□□"
            Case 3: daida = "■□□□"
            Case 4: daida = "□□□□"
           End Select


        Cells(i, 79) = daida
     i = i + 1
    k = i
    If i = kaigou + 100 Then Exit Do
Loop
         witi = 67
   For i = 1 To k - 2
        For j = 1 To 4 '出目パターン作成
         If Cells(i + 1, witi + hit(i, j)) = "" Then
              Cells(i + 1, witi + hit(i, j)) = "●"
         ElseIf Cells(i + 1, witi + hit(i, j)) = "●" Then
              Cells(i + 1, witi + hit(i, j)) = "◎"
               dbl = dbl + 1
                 If dbl = 1 Then Db = "2" Else Db = " d2"
               Cells(i + 1, witi + 11) = Db
             
           ElseIf Cells(i + 1, witi + hit(i, j)) = "◎" Then
              Cells(i + 1, witi + hit(i, j)) = "☆"
              Cells(i + 1, witi + 11) = 3
           ElseIf Cells(i + 1, witi + hit(i, j)) = "☆" Then
              Cells(i + 1, witi + hit(i, j)) = "★"
              Cells(i + 1, witi + 11) = 4
           End If
        Next j
         dbl = 0
 
    Next i
      Call box 'ボックス回数カウント等
  
    Application.ScreenUpdating = True


   Call 当選番号表示
  
    Call saikeisanon
   
End Sub


----------------------------------



Sub box()'ボックス回数カウント等


Dim moji(6000) As String
Dim i As long, j As long, x As long, rencyan As long, caler As long
 Range("ce2:ce6000").Select
 Selection.NumberFormatLocal = "@"
  Selection.ClearContents


  i = 2


Do Until Cells(i, 18) = ""
  
   For k = 1 To 3
  
      For j = 1 To 3
        If hit(i - 1, j) > hit(i - 1, j + 1) Then
           daisyou = hit(i - 1, j)
           hit(i - 1, j) = hit(i - 1, j + 1)
           hit(i - 1, j + 1) = daisyou
        End If
       
      Next j
    Next k
       For j = 1 To 4
   
       moji(i) = Trim(moji(i)) + Trim(Str(hit(i - 1, j)))
        If j = 4 Then 'ボックス回数計算
   
          Cells(i, 83) = moji(i)
          Cells(i, 84) = WorksheetFunction.CountIf(Range(Cells(2, 83), Cells(i, 83)), Cells(i, 83))
        
        End If
      Next j
     
          caler = WorksheetFunction.CountIf(Range(Cells(2, 66), Cells(i, 66)), Cells(i, 66))
   
              Set stcolo = Cells(i, 66)
            stcolo.Borders(xlEdgeLeft).ColorIndex = 1
          If caler = 2 Then 'ストレート2回目緑色にする
           'stcolo.Borders(xlEdgeLeft).ColorIndex = 6
            stcolo.Borders(xlEdgeLeft).ColorIndex = 4
          ElseIf caler = 3 Then 'ストレート3回目赤色にする
       
            stcolo.Borders(xlEdgeLeft).ColorIndex = 3
          
          ElseIf caler = 4 Then 'ストレート4回目両脇赤色にする
        
             stcolo.Borders(xlEdgeLeft).ColorIndex = 3
             stcolo.Borders(xlEdgeRight).ColorIndex = 3
           
          ElseIf caler = 5 Then 'ストレート5回目両脇点線下線赤色にする
            
             stcolo.Borders(xlEdgeLeft).ColorIndex = 3
             stcolo.Borders(xlEdgeRight).ColorIndex = 3
             stcolo.Borders((xlEdgeBottom)).ColorIndex = 3
             
          ElseIf caler = 6 Then 'ストレート6回で両脇実線下線赤色にする
             stcolo.Borders(xlEdgeLeft).ColorIndex = 3
             stcolo.Borders(xlEdgeRight).ColorIndex = 3
             stcolo.Borders((xlEdgeBottom)).ColorIndex = 3
             stcolo.Borders((xlEdgeBottom)).Weight = xlThin
            
          ElseIf caler >= 7 Then 'ストレート7回以上で両脇二重下線赤色にする
             stcolo.Borders(xlEdgeLeft).ColorIndex = 3
             stcolo.Borders(xlEdgeRight).ColorIndex = 3
             stcolo.Borders((xlEdgeBottom)).ColorIndex = 3
             stcolo.Borders((xlEdgeBottom)).Weight = xlThick
            
            
          End If
         
         For x = 1 To 10 '連荘数
         
           If Cells(i, 66 + x) <> "" And Cells(i + 1, 66 + x) <> "" Then
            rencyan = rencyan + 1
           End If
        Next x
          If rencyan > 0 Then Cells(i + 1, 77) = rencyan
                     rencyan = 0
  
    If i = 6000 Then Exit Do
     i = i + 1
 
Loop
 Cells(i, 80).Select


End Sub