マクロが難しい
マクロはやさしいと言えたなら良いなと思います。
やさしいマクロを作るのはやさしいです。
やさしいマクロだけでは限界がありますが?
と言っても、難しいマクロを作るのは難しいですw
やさしい → 難しい
そこにレベルが有るだけだと思います。
まずはやさしいマクロをマスターしてからがスタートです。
その前になぜマクロを作るか?
それはマクロでデータを処理出来れば楽だからですね!
楽なうえに手作業のミスが無くなります。
マクロが中々出来ないのは
・マクロの基礎が出来てない。
・何をマクロ化するか決まっていない。
・処理をする前段階の仕組づくりが出来ないからだと思います。
・それとマクロなどのプログラムの考え方が良く分かっていない(私自身もw)
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