仕組を考える(ホットナンバー)
マクロを考える前に仕組みを考える必要があります。
仕組が考えられなければ、マクロは作れないような気がするからです。
(私はなかなか作れなかったので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(仕組作り)」にも仕組について書いてます。
「マクロはアイデア?」も仕組づくりに通じる気がします。