このページではVBAの基本―。繰り返し処理を実現する方法「Do~Loop」ステートメントの使い方を解説します。
- Do~Loopステートメントの意味と使い方
- 【危険】無限ループとは?
- For文との違い―詳細解説ページへのリンクあり
VBAを用いて業務効率化を行う際に、知っておくと便利な重要知識となりますので是非最後までご覧ください
基本構文①―Do~Loop(While条件を用いる方法)
Do While (条件式)
------処理-------
Loop
Do
------処理-------
Loop While (条件式)
上記2つの基本構文の違いは、While条件の記述場所箇所です。
While条件は、Doの直後においても、Loopの後ろにおいても同じ意味になります(処理の内容は変わりません。)
一般的には、可読性向上(読みやすくする)のため、Doの直後に指定するのがおすすめです。
While条件とは?:Do~Loopステートメント
While条件とは、Do~Loopステートメントが実行される条件のことを指し示します。Whileの後の(条件式)が当てはまる間(TRUEの間)に処理が繰り返されます。
Do While i < 20 ` ここに繰り返したい処理を記述する。 i = i + 1 `処理が完了したらカウンタを1つあげる Loop
上記の例で言うと、While条件を i < 10
としています。つまり、変数「i」が「20以下」の場合、処理が繰り返されます。
仮に、条件式を 10 = 10 などのように常に成り立つようにしてしまうと無限ループに陥ります。
無限ループに陥ったら
無限ループとは、その名の通り処理が永遠に続いてしまうことです。一般的なプログラミング言語であれば、例外処理が走ってエラーメッセージが出力されたりするのですが、VBAの場合は動き続けてしまう場合がたくさんあります。
もし、VBAを実行した際に処理がとまらなくなったら「ESC」キーを押しましょう。強制的に、VBAを中断し処理を終了させることができます。
サンプルコード:Do~Loop(While条件を利用する場合)
While条件を用いたDo~Loopステートメントのサンプルです。
Sub HelloWorld() `変数宣言(繰り返し処理のカウンタ) Dim i As Integer `変数「i」に初期値1を代入する i = 1 `繰り返し処理(19回続ける) Do While i < 20 Worksheets("Sheet1").Cells(i, 1).Value = "HELLO EXCEL VBA WORLD" i = i + 1 Loop End Sub
While条件の場合、通常はカウンタ(ただの変数です)と一緒に利用します。
このサンプルコードでは、A列の1行目から19行目に「HELLO EXCEL VBA WORLD」と入力していきます。
処理結果
上記サンプルコードのひっかかりポイントは、11行目の「i = i + 1」で変数 i の増加処理を忘れないことです。
もし、この変数 i の増加処理を忘れた場合、While条件「i>20」が常に成立してしまうため、無限ループに陥ります。
※サンプルコード中のDim(変数宣言)の詳細は以下の記事をご覧ください。
Whileの記述方法を覚えておけばDo/Loop構文の基本理解はOKです。
このページでは、合わせてUntil条件を利用した書き方も解説します。次の章では、Untilを利用するパターンの書き方を解説します。
基本構文②―Do~Loop(Until条件を用いる方法)
Do Until (条件式)
------処理-------
Loop
Do
------処理-------
Loop Until (条件式)
基本的には、While条件を用いる場合と記述方法は変わりません。Until条件の場合も、可読性向上のためにDoの直後にUntil条件を記述することが一般的です。
Until条件とは?:Do~Loopステートメント
Until条件はWhile条件と異なり、条件式の値が当てはまらない間(FALSEの場合)に処理が繰り返されます。
Whileは「TRUE」の場合でしたが、Untilは逆の「FALSE」です。条件式に、絶対に成り立たない「10 = 9」のような式を記述してしまうと無限ループに陥ります。
Whileの方が分かりやすいので、できるだけWhileを利用するのがおすすめです。
サンプルコード:Do~Loop(Until条件を利用する場合)
While条件の説明で用いたサンプルコードと全く同じ結果となるコードです。
ポイントは、①条件に「Until」を指定することと、②条件式の書き方です。
Sub HelloWorld() `変数宣言(繰り返し処理のカウンタ) Dim i As Integer `変数「i」に初期値1を代入する i = 1 `繰り返し処理(19回続ける) Do until i = 20 Worksheets("Sheet1").Cells(i, 1).Value = "HELLO EXCEL VBA WORLD" i = i + 1 Loop End Sub
処理結果
初心者が誤解しがちなポイントは、「i = 20」になったら処理を止まるという点です。すなわち、処理は19回しか繰り返されません。
「20になるまで」という言葉を利用すると、20回繰り返されるような錯覚に陥ってしまう場合があります。改めて、Until条件は「FALSE」の間だけ処理が行われることを注意して覚えておいてください。
回数を指定したい場合はFor文が便利
本来、Do~Loopステートメントは回数を指定するのでは、条件を指定する利用方法がメインです。
回数を指定して繰り返し処理を行いたい場合は、「For」ステートメントを利用する方がGood。
Forステートメントについては、別途詳細ページを設けましたので、こちらの記事でご確認ください。
0からプログラミングを学びたい方は
プログラミングをより実践的に学びたい―。実際にコーディングをしながら学びたい―。独学に限界を感じている―。
そんな方には、無料体験/オンライン完結もあるプログラミングスクールで学ぶのがおすすめです。都度検索しながら知識を補完していくのではなく、1から体系立てて学ぶことで短時間・かつ効率的にスキルハックすることが可能です。
おすすめのプログラミングスクールをこちらのページで解説しておりますので、是非合わせてご覧ください。