【VBA入門】While Wend、Do While、Do Loop Whileの使い方

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

実行結果:
While01

このサンプルコードでは、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

実行結果:
While01

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

実行結果:
While01

複数の条件で使う方法

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

実行結果:
While02

このサンプルコードでは、論理演算子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

実行結果:
While01

このサンプルコードでは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

実行結果:
While02

このサンプルコードでは、Integer型の変数iの「i < 3」という条件を満たす間はループ内のGoToステートメント以降の処理は行われず、ラベルL1へ処理が戻っています。

変数iの「i < 3」という条件を満たさなくなると、ループ内のそれ以降の処理も実行されています。

Do While Loopステートメントの「i < 5」という条件を満たさなくなると、ループ外の処理を実行し最後まで処理が実行されています。

まとめ

ここでは、Whileステートメントの使い方について説明しました。

Whileステートメントを使う場合は条件を満たしたあとに不要な処理を行わないように、ExitステートメントやGoToステートメントと組み合わせて適切に制御する必要があります。

使いこなすことができるように、この記事を何度も参考にして下さいね!

この記事を書いた人

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

目次