まえがき
繰り返し処理にはFor Next構文とDo Loop構文の2種類あります。
本記事ではDo Loop構文について解説します。
For Next構文とDo Loop構文は、どちらを使ってもできる事やできない事の差異はありません。For Next構文は回数を指定するもので、Do Loop構文は条件を指定する違いがありますので、設定しやすい方を利用すれば良いです。
本記事ではDo While Loop構文を中心に解説します。理由としてはDo Loop構文にもWhileと使うパターンと、Untilを使うパターン条件を反転させればどちらも同じなので、ほとんどの内容が共通となるからです。
Do Until Loop構文を使う場合は、UntilをWhileに読み替えて理解してください。
Do While Loop構文とFor Next構文の違い
whileを直訳すると[~の間]となります。Do While構文では条件を満たしている間は繰り返し処理を実行します。
例えば、i1が17以下の間(i1が18まで)は処理を終了させる場合は、このように書きます。
i1 = 1 |
Do While i1 <= 17 |
【処理】 |
i1 = i1 + 1 |
Loop |
これはfor next構文で書くとこうなります。
for i1 = 1 to 18 |
【処理】 |
next i1 |
このように回数を指定したい場合でもDo Loop構文で書く事はできますし、反対に条件を指定したい場合でもfor next構文で書く事はできます。Do Loop構文では[i1 = i1 + 1]のように数値を自身で増やす必要があり、for nextのstepにあたる設定はこの値で調整します。
数字での条件の場合は、for next構文の方が書きやすいので、値の変化をトリガーに繰り返しをやめる方がDo Loop構文に適しています。Do Loop構文に適したサンプルとして、特定の文字列のセルが見つかったら処理を終了します。
i1 = 1 |
Do While Cells(i1, 3) <> “文字列” |
Cells(i1, 3) = “【処理】” |
i1 = i1 + 1 |
Loop |
Do Until Loop構文について
Untilを直訳すると[~まで]となります。Do Until構文では条件を満たすまで繰り返し処理を実行します。
例えば、i1が17より大きくなるまで(i1が18まで)は処理を終了させる場合は、このように書きます。
i1 = 1 |
Do Until i1 > 17 |
【処理】 |
i1 = i1 + 1 |
Loop |
不等号の方向など条件式が反転しただけで、内容は同じであることが分かります。
条件式の比較演算子
IF文と比較演算子は同じです。リンクを確認するのは手間なので、改めて記載します。
条件式 | 説明 |
A = B | AがBと一致する場合 |
A <> B | AがBと一致しない場合 |
A >= B | AがB以上の場合 |
A <= B | AがB以下の場合 |
A > B | AがBより大きい場合 |
A < B | AがBより小さい場合 |
Loop処理を途中で抜ける方法
Loop処理を抜ける場合は、処理を終了させるところに[Exit Do]を記載します。
if文で特定の【条件】になった場合にLoopを中止する場合、以下のように記載します。
HENSUU = Cells(i1,3) |
Do While HENSUU = “文字列” |
i1 = i1 + 1 |
if 【条件】 then Exit Do |
Loop |
終了条件を書かずに[Exit Do]で終了させる書き方もできます。
HENSUU = Cells(i1,3) |
Do While |
【処理】 |
i1 = i1 + 1 |
if 【条件】 then Exit Do |
Loop |
入れ子設定
Do Loop構文の中にDo Loop構文を入れる事で、2次元以上の繰り返し処理を実行できます。サンプルとして左上から10×10マスで〇を埋めるプログラムは次のようになります。
i1 = 1 |
Do While i1 <= 10 |
i2 = 1 |
Do While i2 <= 10 |
Cells(i1, i2) = “〇” |
i2 = i2 + 1 |
Loop |
i1 = i1 + 1 |
Loop |
注意点としては、後ろがどちらもLoopで同じなので、Do WhileとLoopのペアがどれか分からなくならないように[Tab]キーを使ってインデントを下げましょう。
終了条件を後ろに書く
終了条件を後ろに書く事もできます。後ろに終了条件を書いた場合は、必ず1回はLoop内の処理が実行されるので、1回分繰り返し処理が多くなります。
i1 = 1 |
Do |
Cells(i1, 2) = “test” |
i1 = i1 + 1 |
Loop While i1 <= 17 |
最低一回は実行させる場合に、こういった方法がある事だけ知っておきましょう。
あとがき
プログラムの基本は条件分岐と繰り返し処理です。今まで条件分岐の2つの方法と、繰り返し処理の2つの方法を説明しましたので、この4点はしっかりと理解して繰り返し使う事で身につけておきましょう。
[条件分岐の記事]
[繰り返し処理の記事]
- 繰り返し処理[for next]の使い方
- 繰り返し処理 Do while Do until(本記事)
ここまで理解できれば、基本はある程度身に付いたと思います。
初心者向けの記事として、利用頻度が高いものをピックアップして記載しています。中級者以上の記事を理解するうえでも前提となる知識ですので、あと少し頑張ってください。
中級者向け以降は必要に応じて、何かを実現したい時に読める記事にしていきたいと考えておりますので、こういった事も実現できるという事だけ覚えて貰って、詳細は必要になったら見て頂く程度で良いかもしれません。
本サイトでは、このほかにVBAに関する記事を随時更新していく予定です。VBAについて一番詳しく分かりやすいサイトを目指して頑張っていきますので、よろしければTOPページから是非ほかの記事もご覧ください。