同じ処理を何回も繰り返したい場合、Do Loopを使います。for Nextは、別の回にします。
構文
Do While 条件
命令
Loop
上記内容を、日本語でいうと、「条件の間は、命令をくりかえしなさい」という表現になります。
以下に例を表示します。
Sub 繰り返しDOLoop()
i = 0
Do While i < 10
i = i + 1
Cells(i, 1) = i
Loop
End Sub
上記内容は、まず iを0として、iをひとつづつ増やして、そのiを行数として、A列にiの数字をいれていく。という内容です。
でも、仕事でなかなかきまった回数だけ処理するというシチュエーションは、少ないと思います。
行数がある分だけ繰り返す
通常は、処理する行数はいつも変わります。変わる行数に対応するために抜け出す条件を変化させます。
Sub A列がある限り繰返し()
i = 0
N = 1
Do
i = i + 1
N = Cells(i, 1)
If N = “” Then
Exit Do
Else
End If
Cells(i, 2) = i
Loop While N <> “”
MsgBox i & “-” & N
End Sub
説明です。iは行数です。Nは、A列に入っているものです。途中にIF文がありますが、A列が空白であれば、DoLoopを抜ける Exit Do でDoLoopを抜けます。B列に行数のiを入れて、Loopで上に戻りますが、ここでも念のため、Nが””空白でなければ、Loopを修了する文を入れておきました。Loopだけでも問題ありません。
最後にMsgBoxを入れておいたのは、Loopが終わったのを確認するために入れておきました。通常であれば、Loopから抜けて実行する命令文を入れてください。また、Cells(i,2)=i のところも、通常であれば、命令文を入れてください。
応用
すこし応用して、途中にメッセージ画面を出して、継続するかしないかを、手動で選べるようにしてみましょう。
Sub 自分で選べるA列がある限り繰返し() i = 0 N = 1 Do i = i + 1 N = Cells(i, 1) If N = "" Then Exit Do Else End If 結果 = MsgBox("処置を続けますか?", vbYesNo + vbQuestion, "どっち?") If 結果 = vbYes Then Else MsgBox "処理を終わります " Exit Do End If Cells(i, 2) = i Loop MsgBox i & "-" & N End Sub
上記のような形になりますが、手動をループの中に入れるのは、ループの意味がなくなってしまう感じです。まあ、そんなときもあるかもしれないので、参考として記載してみました。
逆に、途中でループを抜けるときに、ループを継続するかどうか聞くほうが、一般的でした。
コメント