本ページには広告が含まれています。

Excel VBA Do Loopステートメント(初心者向け17)

Excel VBA Do Loopステートメント(初心者向け17)

今回もよろしくお願いします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 として処理されます
statementscondition が 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ステートメントです。楽しみに待っていてね(^^)/

まとめと感想など

・Do…Loop の使い方がわかりました
・Do While…Loop
Do Until…Loop の違いがわかりました
・ネストする方法やループを抜ける Exit Do の使い方がわかりました

マクロ(VBA)を実行する際は必ずバックアップを取ってから行ってください
・マクロ(VBA)は実行後にファイルを保存すると元に戻すことはできません!
・実行後にファイルを保存せず終了すれば、実行前に戻すことができます!

★★★ ランキング参加中! クリックしてね(^^)/ ★★★

今後の記事について

今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
当面は「初心者向けマクロVBA」の記事を継続して書いていきます

【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう現在検討中です
・その他雑記的に「小ネタなどいろいろ」・・・・・
・今後の記事にもご期待ください(^^)/

スポンサーリンク

過去記事のサンプルファイルをダウンロードできます

この記事のサンプルはこのリンク先からダウンロードできます

過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください