Whileステートメントって使っていますか?
ある条件がTrueであれば処理を繰り返し続けたい場合に使用します。またExitステートメントやGoToステートメントを使って必要のない処理を省略することもできます。
この記事では、Whileステートメントについて
- Whileステートメントとは
- Whileの使い方
- 複数の条件で使う方法
- Exitでループを抜ける方法
- GoToでループをスキップする方法
など基本的な内容から、応用的な内容についても解説していきます。
今回はWhileステートメントについて、使い方をわかりやすく解説します!
Whileステートメントとは
Whileステートメントは、ある条件がTrueであれば処理を繰り返したい場合に使用します。
条件が変わらなければ処理を続けることになります。条件が変わった時点で処理を終了してループから抜けなければ、必要のない処理を続けることになりムダが発生してしまいます。
そんな場合にExitステートメントでループを抜けたり、GoToステートメントを使って不要な処理をスキップするなどの処理の制御を行います。
これらの使い方について詳しく説明していきます。
Whileの使い方
Whileステートメントを使った繰り返し構文には、いくつか種類があります。
While WendステートメントとDo While Loppステートメント、Do Loop Whileステートメントです。
それぞれの使い方についてみていきましょう。
While Wendの使い方
While Wendステートメントは以下のように記述します。
While 条件式 処理 Wend
条件式がTrueであれば、繰り返し処理を続けます。
条件式が初めからFalseの場合は、ループ内の処理は1度も実行されずに、ループ外の次の処理に移行します。
サンプルコードで確認しましょう。
Sub macro1() Dim i As Integer, str As String While i < 3 i = i + 1 str = str & i & "回目の処理です" & vbCrLf Wend str = str & "処理が終了しました" MsgBox str End Sub
実行結果:
このサンプルコードでは、Integer型の変数iが3未満であれば処理を繰り返します。1回ごとの処理で変数iに1ずつ加算する処理を行っています。
3回処理を繰り返えすと条件を満たさなくなり、Whileステートメントの繰り返しループを抜けて全ての処理が終了しています。
Do While Loopの使い方
次にDo While Loopステートメントは以下のように記述します。
Do while 条件式 処理 Loop
While Wendステートメントと記述が似ています。
こちらも条件式がTrueであれば、繰り返し処理を続けます。条件式が初めからFalseの場合は、ループ内の処理は1度も実行されずに、ループ外の次の処理に移行します。
サンプルコードで確認しましょう。
Sub macro2() Dim i As Integer, str As String Do While i < 3 i = i + 1 str = str & i & "回目の処理です" & vbCrLf Loop str = str & "処理が終了しました" MsgBox str End Sub
実行結果:
Do Loop Whileの使い方
Do Loop Whileステートメントは以下のように記述します。
Do 処理 Loop While 条件式
処理を先に記述し、繰り返しの条件を処理の後に記述します。
Do Loop Whileステートメントは少々動きがちがいます。
条件式が初めからFalseの場合でもループ内の処理が1度実行されます。
サンプルコードで確認しましょう。
Sub macro3() Dim i As Integer, str As String Do i = i + 1 str = str & i & "回目の処理です" & vbCrLf Loop While i < 3 str = str & "処理が終了しました" MsgBox str End Sub
実行結果:
複数の条件で使う方法
Whileステートメントを複数の条件で使う場合は、論理演算子AndもしくはOrを使います。
複数の条件をすべて満たす必要がある場合はAndを使います。少なくとも1つの条件を満たす必要がある場合はOrを使います。
サンプルコードで確認しましょう。
Sub macro4() Dim i As Integer, str As String i = 2 While i > 1 And i < 5 i = i + 1 str = str & i & "回目の処理です" & vbCrLf Wend str = str & "処理が終了しました" MsgBox str End Sub
実行結果:
このサンプルコードでは、論理演算子Andを使ってInteger型の変数iが「i > 1 かつ i < 5」の条件を満たす場合にWhile Wendステートメントのループ内の処理が実行されています。
Exitでループを抜ける方法
Exitステートメントを使ってループを抜ける方法についてみていきましょう。
Exitステートメントに到達すると、ループ内のそれ以降の処理は行わずにループ外の次の処理に移ります。
サンプルコードで確認しましょう。
Sub macro5() Dim i As Integer, str As String Do While i < 3 i = i + 1 If i > 3 Then Exit Do End If str = str & i & "回目の処理です" & vbCrLf Loop str = str & "処理が終了しました" MsgBox str End Sub
実行結果:
このサンプルコードではDo While Loopステートメントの条件式でInteger型の変数iが5未満であれば処理を繰り返します。
しかし実行結果を確認すると途中で処理が実行されず、ループ外の処理に移行していることがわかります。
これは変数iが「i > 3」の条件を満たし、Exit Doステートメントに達したためで、それ以降のループ内の処理は実行されていません。
なお、While Wendステートメントのループ内でExitステートメントは使うことができないので、Do While Loopステートメントを使いましょう!
GoToでループをスキップする方法
GoTOステートメントを使ってループ内の処理をスキップする方法についてみていきましょう。
GoToステートメントのラベル先をDo While Loopステートメントのループ内の先頭に指定します。GoToステートメントに到達すると以降の処理は実行されずに、ループの最初から再び実行されうようになります。
サンプルコードで確認していきましょう。
Sub macro6() Dim i As Integer, str As String Do While i < 5 L1: i = i + 1 If i < 3 Then GoTo L1 End If str = str & i & "回目の処理です" & vbCrLf Loop str = str & "処理が終了しました" MsgBox str End Sub
実行結果:
このサンプルコードでは、Integer型の変数iの「i < 3」という条件を満たす間はループ内のGoToステートメント以降の処理は行われず、ラベルL1へ処理が戻っています。
変数iの「i < 3」という条件を満たさなくなると、ループ内のそれ以降の処理も実行されています。
Do While Loopステートメントの「i < 5」という条件を満たさなくなると、ループ外の処理を実行し最後まで処理が実行されています。
まとめ
ここでは、Whileステートメントの使い方について説明しました。
Whileステートメントを使う場合は条件を満たしたあとに不要な処理を行わないように、ExitステートメントやGoToステートメントと組み合わせて適切に制御する必要があります。
使いこなすことができるように、この記事を何度も参考にして下さいね!