
前回Do While~LoopステートメントとDo Until~Loopステートメントについて解説しました。
【Excel VBA】Do While~Loopステートメントで条件を満たした時に同じ処理を繰り返す方法 | Excelを制する者は人生を制す ~No Excel No Life~
【Excel VBA】Do Until~Loopステートメントで条件を満たさない時に同じ処理を繰り返す方法 | Excelを制する者は人生を制す ~No Excel No Life~
それぞれ条件式に応じて繰り返し処理を実行する構文でしたが、繰り返し処理を開始する位置で最初からループを抜けてしまうケースがあり、その際は何も処理がなされずにマクロの実行が終わってしまうこともあります。
それが当初の目的に照らし合わせて問題なければ良いですが、少なくとも1回は処理を行なうことが想定されているケースもあることでしょう。
その場合、Do Loopステートメント内の「While」や「Until」の条件式の部分を構文の後の方に回すことで条件判定を後にし、少なくとも1回は繰り返し処理を実行させることが可能です。
今回は少なくとも1回は繰り返す処理を実行するDo~Loop While(Until)ステートメントについて解説していきます。
Do~Loop While(Until)ステートメントの基本構文
1 2 3 | Do 処理 Loop While 条件式</td> |
1 2 3 | Do 処理 Loop Until 条件式</td> |
処理
繰り返しを行なう処理を設定します。
条件式
繰り返しを行なう条件を設定します。
「While」では条件式を満たす場合(真の場合)のみ、「Until」では条件式を満たさない場合(偽の場合)のみそれぞれ繰り返し処理を実行します。
「While」では偽の場合、「Until」では真の場合に「ループを抜ける(繰り返し処理が停止)」ということになります。
使用例
今までのDo Loopステートメントの記事と同様にA列に順番に1から10までの値をA1セルから代入していきたいとします。
今回は「While」を例にしますが、「Until」も使い方は同様です。
1 2 3 4 5 6 7 8 | Sub ループ⑤() Dim i As Integer i = 1 Do Cells(i, 1).Value = i i = i + 1 Loop While i < 11 End Sub |
2行目でカウンタ変数をInteger型で設定します。変数名は”i”としています。
4行目は「Do」のみ、改行し5行目に繰り返し実行する処理の記述となります。
今回の処理は「A列に順番に1から10までの値をA1セルから代入」なので5行目は「Cells(i, 1).Value = i」となります。
6行目で変数の値を繰り返し処理の回数に伴い1ずつ加算となるように「i = i + 1」としています。
7行目に「Loop While」の後に条件式を記述します。
今回の開始値はA1セルから10回繰り返し処理を行なうので条件式は変数の値が11より小さいことを条件としています。
マクロの動作イメージ
A1~10セルが最初はブランクになっています。
マクロを起動すると、A1~10セルにはそれぞれ1~10の値が代入されます。(行数と同じ数)
まとめ
Do Loopステートメントは繰り返し処理を行なう条件を真偽のどちらにするか、条件判定を処理の前後のどちらにするのか、の計4通りのうち、どのパターンが目的に合致しているかを見定めてコーディングする必要がありますね。
ただ、トライアンドエラーで少しずつ修正しながらより良いパターンへとしていけば問題ないですよ!