
目次
VBAによる「Do~Loop」を利用した繰り返し処理を行う方法を紹介していきます。
繰り返し処理は、「For~Next」で行う方法もありますが、
Forは繰り返し回数がわかっている場合に使いますが
Do~Loopは繰り返し回数がわからない場合に使用することができます。
それでは早速見ていきましょう。
Do~Loopを利用した繰り返し処理
Do~Loopは繰り返し回数がわからない場合に使用できます。
繰り返し回数の代わりに、条件を指定し繰り返し処理を行います。
「~の間ループをする」「~になるまでループする」など条件を指定しましょう。
Do While ~ Loop 「~の間ループをする」
「Do While ~ Loop」は「~の間ループをする」という繰り返し処理を行うことができます。
実際の例を見てみましょう。
「変数rowが10未満の間、処理を繰り返す」プログラムを作成しました。
Private Sub cmdDo_Click()
Dim row As Integer
row = 1
Do While row < 10
Cells(row, 1).Value = row
row = row + 1
Loop
End Sub
解説
6行目:rowが10未満の場合処理を繰り返す
7行目:1列目の1~9行目に変数rowの値を代入する
8行目:変数rowを加算する この行を忘れるとrowがずっと10未満になるので、無限ループが発生します。
結果
結果をみると10未満の値が入力されていることが確認できました。
8行目の「row = row + 1」を忘れると無限ループが発生するので注意しましょう。
Do Until ~ Loop 「~になるまでループをする」
「Do Until ~ Loop」は「~になるまでループをする」という繰り返し処理を行うことができます。
例では、変数rowが10になるまでループを行う処理をしています。
Private Sub cmdDo_Click()
Dim row As Integer
row = 1
Do Until row = 10
Cells(row, 1).Value = row
row = row + 1
Loop
End Sub
結果
このように、先ほどのDo Whileと同じ結果になりました。
結果は同じになりましたが、意味は異なりますので違いを抑えましょう。
「Do While」rowが10より値が小さい間、繰り返し処理を行います。
「Do Until」rowが10になるまで、繰り返し処理を行います。
Do Loop 「条件を指定せずループ」
「Do While」や「Do Until」はループをさせる条件を指定していましたが、
条件を指定せずループさせる方法を紹介します。
例を見てみましょう。
Private Sub cmdDo_Click()
Dim row As Integer
row = 1
Do
If row = 10 Then
Exit Do
End If
Cells(row, 1).Value = row
row = row + 1
Loop
End Sub
解説
6行目:Doのみすることで、ループの終了条件を指定していません。無限ループをすることができます。
8~10行目:Exit Doは、ループを終了するという意味になります。なのでここでは、row = 10になった時ループを終了する。といった意味になります。
結果
このように、「Do ~Loop」で終了条件を決めずにループさせることができます。
それだけでは無限ループになってしまうので、「Exit Do」と組み合わせて使用しましょう。
ループを終了させるための条件が複雑な場合やループを好きな位置で終了させることができるというメリットがあります。
自由度が高いループ処理となっています。
状況に合わせて使い分けましょう。
Exit Do と Continue
ループを終了させる方法と次のループへ処理を飛ばす方法を紹介していきます。
どちらも必ず使いますので押さえておきましょう。
ループを強制終了させるには「Exit Do」
次のループへ処理を飛ばすには「Goto」を利用しましょう。
VBAにはContinueといった関数はないので、Gotoでその代わりをします。
例を見てみましょう。
Private Sub cmdDo_Click()
Dim row As Integer
row = 1
Do Until row = 10
If row = 8 Then
Exit Do
End If
If row = 5 Then
GoTo ContinueDO
End If
Cells(row, 1).Value = row
ContinueDO:
row = row + 1
Loop
End Sub
解説
6行目:row=10になるまでループを行う。
8~10行目:row=8の時、ループを強制終了させる。
12~14行目:row=5の時、ContinueDo:(18行目)まで処理をとばす。
結果
結果をみるとわかるように、
5行目は次のループに処理が飛んでいることがわかります。
また、8行目でループが強制終了していることも確認できました。
まとめ
Doは、ループの回数が決まっていない場合や可変の場合に利用することができます。
ループの回数を条件で指定することがとても便利となっています。
「Do While」「Do Until」の使い方を覚えておきましょう