今回もよろしくお願いしますm(_ _)m
順番からすると今回は繰り返し処理の第3弾 Do…Loopですね。
今回もしっかり勉強しま~す(^^)
そのとおり! Do…Loop ですね(^^)
For…Next は繰り返す回数をあらかじめ指定するものでしたけど、
Do…Loop は繰り返す条件を指定するものです!
前回のおさらいはこちらの記事です(^^)/ 下のカードをクリックすれば開きます
前回記事でわかったことは
・For Each…Nextステートメントは配列またはコレクションで使用する
・For Each…Nextステートメントの使い方が詳しくわかりました
【この記事でわかることは】
・ループ(繰り返し)処理「Do…Loop」の使い方がわかります
・Do While…Loop と Do Until…Loop それぞれわかりやすく説明します
Do…Loop ステートメント
Do…Loopステートメントには「Do While…Loop」と「Do Until…Loop」の二つがあります
Do…Loopステートメントの構文
Do While…Loopは、条件が True(真)の間だけ、一連のステートメントを繰り返し実行します
Do Until…Loopは、条件が True(真)になるまで、一連のステートメントを繰り返し実行します
言い換えると(どちらも同じですが(^^;)
Do While…Loopは、条件が Felse(偽)になるまで、一連のステートメントを繰り返し実行します
Do Until…Loopは、条件が Felse(偽)の間だけ、一連のステートメントを繰り返し実行します
【構文】
・ループ開始時に条件を評価する構文
Do [{ While | Until } condition ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop
・ループ終了時に条件を評価する構文(最初の1回は一連のステートメントを実行する)
Do
[ statements ]
[ Exit Do ]
[ statements ]
Loop [{ While | Until } condition ]
・While と Until は、どちらか一方を指定します
・conditionには、ループを継続する判定式を指定します
・statementsには、ループ中に実行するステートメントを指定します
Do Loop ステートメントの構文には、次の指定項目があります
パーツ | 説明 |
---|---|
condition | 省略可能。 True または False の数式または文字列式 condition が Null である場合、condition は False として処理されます |
statements | condition が True の間または True になるまで 繰り返し実行される 1 つ以上のステートメント |
ループの途中で Exit Do を使うと、強制的にループを抜けます。
Do…Loop の動きを解説
・先ほどの構文をわかりやすく書くとこんな感じです(^^)
・左が While 条件式が真(True)の場合 / 右が Until 条件式が偽(False)の場合です
Do While 条件式
条件式が真(True)の場合
ステートメントを実行する
Loop
または
Do
ステートメント実行後
条件式が真(True)の場合ループ
Loop While 条件式
Do Until 条件式
条件式が偽(False)の場合
ステートメントを実行する
Loop
または
Do
ステートメント実行後
条件式が偽(False)の場合ループ
Loop Until 条件式
・条件に合わなくなった場合、ループは終了し Loop ステートメントの後のステートメントに実行が移ります
・条件式を Loop の後に使う場合は、最初の1回は一連のステートメントを実行することになります
Exit Do でループを抜ける
・Do…Loop ステートメント内で Exit Do を使えばループの途中でループを中断して抜けることが出来ます
・通常は、条件評価(たとえば If…Then )によりそれ以降ループする必要なくなったと判断した場合ループを抜け、Loop の直後のステートメントに制御を移します
・入れ子になった Do…Loop ステートメント内で Exit Do を使用する場合は、Exit Do に到達したループの 1 つ上のレベルのループに制御が移ります
Do…Loop 使用例
・次の使用例は、ネスト、Exit Do と条件を評価する構文2例を使っています
'Do...Loopサンプル(ネスト、Exit Do)
Sub DoLoopSample()
Dim Check As Boolean, Counter As Long, Total As Long '各変数宣言
Check = True: Counter = 0: Total = 0 '変数を初期化する
Do '外側のループ(条件はLoop側にセット)
Do While Counter < 20 '内側のループ、条件=カウンターが20未満
Counter = Counter + 1 'カウンターをインクリメントする(+1)
If Counter Mod 10 = 0 Then 'カウンター10毎に選択メッセージを表示
Check = (MsgBox("処理を継続しますか?", vbYesNo) = vbYes) 'YesNo選択
If Not Check Then Exit Do 'Noが選択で内側ループを抜ける
End If
Loop
Total = Total + Counter 'カウンター回数をTotalの重ねる
Counter = 0 'カウンター初期化
Loop Until Check = False '外側ループの条件=NOが選択されFalseとなった場合
MsgBox "Counted to: " & Total '終了時のカウンター数を表示する
End Sub
・外部 Do…Loop ステートメントは、変数 Check が False になるまでループします
・内部 Do…Loop ステートメントは 10 回ループされます
・内部ループ10回毎にユーザーに継続するかどうかをたずねます
・No が選択されると、フラグ(変数 Check)を False に設定します
・If ステートメントで変数 Check が False になったことを確認したら Exit Do ステートメントを使用して、処理途中で内部ループを終了します
・ 外側のループは、フラグ(変数 Check)の False を確認して直ちに終了します
・最後にカウント数のトータルを表示して終了します
Do…Loop 内カウンターの使い方
・For…Next には counter に加算される値を Step で指定できました
・Do…Loop では Step というオプションはありません
・ただ、カウンターがExcel表の行数などの場合、例えば1行置きに処理したい場合には、カウンターに使用する変数を、カウンター変数 = カウンター変数 + 2 のように加算する数値を変えれば実現できます
まとめ(おわりに)
はい! 今回はここで終了です!
Do…Loop ステートメントは理解できましたか?
はい! Do…Loopなんとか頭では理解できたと思いますけど、実際に使ってみないと何とも言えません(^^ゞ
いや、それでいいんです!
実際に自分で試してみることが一番大事なんですよ。頑張ってください!
次回は While..Wendステートメントです。楽しみに待っていてね(^^)/
まとめと感想など
・マクロ(VBA)を実行する際は必ずバックアップを取ってから行ってください!
・マクロ(VBA)は実行後にファイルを保存すると元に戻すことはできません!
・実行後にファイルを保存せず終了すれば、実行前に戻すことができます!
★★★ ランキング参加中! クリックしてね(^^)/ ★★★
今後の記事について
今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
当面は「初心者向けマクロVBA」の記事を継続して書いていきます
【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう現在検討中です
・その他雑記的に「小ネタなどいろいろ」・・・・・
・今後の記事にもご期待ください(^^)/
過去記事のサンプルファイルをダウンロードできます
この記事のサンプルはこのリンク先からダウンロードできます!
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください
・Do…Loop の使い方がわかりました
・Do While…Loop と Do Until…Loop の違いがわかりました
・ネストする方法やループを抜ける Exit Do の使い方がわかりました