【VBA入門】While … Wend, Do While Loop, Do Loop While の使い方と違いを徹底解説

  • 2025.03.27
       
【VBA入門】While … Wend, Do While Loop, Do Loop While の使い方と違いを徹底解説

VBAには、繰り返し処理を行うための制御構文としてForステートメントが用意されていますが、その他にも繰り返し処理を実行できる構文の1つとして 「While」 ステートメントが存在します。

今回は、VBAのWhileステートメントの使い方について、詳しく解説していきたいと思います。

VBAのWhileステートメントとは

Whileステートメントは、繰り返し処理を実行したい場合に使用する制御構文です。
指定する条件の結果がTrueである場合に処理を繰り返し、Falseになるまで実行され続けます。

Forステートメントが指定した回数だけ繰り返し処理を行う構文であるのに対し、条件がTrueであり続ける限り処理を繰り返すのがWhileステートメントの特徴です。

Whileステートメントの使い方

Whileステートメントと呼んでいますが、厳密には構文の形式にいくつかの種類が存在します。
この記事では、以下の3つを中心に解説をしていきたいと思います。

  • While Wendステートメント
  • Do While Loopステートメント
  • Do Loop Whileステートメント

それぞれのステートメントの使い方について、見ていきましょう。

While…Wendステートメントの使い方

まず初めに、While Wendステートメントの使い方について解説します。
While Wendステートメントを使用する際は、以下のように構文を記述します。

【基本構文】

While 条件式
    処理内容の記述
Wend

条件式の結果がTrueであれば、記述した処理が実行され次のループへと移ります。
条件式の評価を先に行ってから処理に移るため、結果が初めからFalseである場合には、1度も処理が実行されずにループが終了します。

【サンプルコード】

Sub sampleWhile()

    Dim count As Integer
    Dim str As String
    
    While count < 3
    
        count = count + 1
        str = str & count & "回実行しました。" & vbCrLf
        
    Wend
    
    str = str & "処理が完了しました。"
    
    MsgBox str

End Sub

【実行結果】

Do While Loopステートメントの使い方

次に、Do While Loopステートメントの使い方について解説します。
Do While Loopステートメントの基本構文は、次のように記述します。

【基本構文】

Do while 条件式
    処理内容の記述
Loop

While Wendステートメントと同様に、条件式の真偽を先に評価し、Trueの場合に処理の実行が行われます。

以下のサンプルコードで動きを確認してみましょう。

【サンプルコード】

Sub sampleWhile2()

    Dim count As Integer
    Dim str As String
    
    Do While count < 3
    
        count = count + 1
        str = str & count & "回実行しました。" & vbCrLf
        
    Loop
    
    str = str & "処理が完了しました。"
    
    MsgBox str
    
End Sub

【実行結果】

先ほどのサンプルコードの一部を Do While Loopステートメントに変更してみましたが、実行結果は While Wendステートメントの時と同じです。
このように、2つのステートメントの仕様には違いがほとんどありません。

ただし、それぞれのステートメントで異なる点として、ループから抜け出す方法に 「Exit」 ステートメントが使用できるかどうかの違いがあります。

Exitステートメントを使用する方法については、後ほど詳しく解説します。

Do Loop Whileステートメントの使い方

続いて、Do Loop Whileステートメントの使い方について解説します。
Do Loop Whileステートメントの基本構文は、次のように記述します。

【基本構文】

Do
    処理内容の記述
Loop While 条件式

このステートメントの一番の特徴は、先ほど紹介した2つのステートメントと比べて、条件判断を行うタイミングが異なる点にあります。
Do Loop Whileステートメントの場合、処理を実行してから条件の真偽が判断されるため、結果に関わらず必ず1度は処理が実行されます。

以下のサンプルコードで、動きの違いを実際に確認してみましょう。

【サンプルコード】

Sub sampleWhile3()

    Dim str As String
    
    Do While False
    
        str = str & "Do While Loop を実行" & vbCrLf
        
    Loop
    
    Do
        str = str & "Do Loop While を実行" & vbCrLf
        
    Loop While False
    
    MsgBox str

End Sub

【実行結果】

条件式に False を指定し、初回でループが終了するよう記述しています。
Do While Loopステートメントと Do Loop Whileステートメントでそれぞれ実行した結果、Do Loop Whileステートメントの処理内容だけがメッセージに表示されています。

複数の条件でWhileステートメントを使う方法

Whileステートメントの条件式に複数の条件を指定したい場合は、論理演算子の 「And」 か、もしくは 「Or」 を使用します。

指定した条件の全てを満たす場合にのみ True としたい時は 「And」 を使用します。
いずれかの条件を満たしていれば問題ない場合は 「Or」 を使用しましょう。

【サンプルコード】

Sub sampleWhile4()

    Dim andStr As String, orStr As String
    Dim count As Integer

    Do While count Mod 2 = 0 And count < 5
    
        count = count + 1
        andStr = andStr & count & " "
        
    Loop
    
    count = 0
    
    Do While count Mod 2 = 0 Or count < 5
    
        count = count + 1
        orStr = orStr & count & " "
        
    Loop
    
    MsgBox "And:" & andStr & vbCrLf & _
              "  Or:" & orStr & vbCrLf

End Sub

【実行結果】

ループの途中で処理を中断したい場合はどうする?

条件式がFalseになる場合とは別に、特定の条件時にだけ処理を中断して次のループにスキップしたり、ループから抜け出したいケースもあるかと思います。

続いては、Whileステートメントでループを中断する方法について解説していきたいと思います。

Exitステートメントで処理から抜け出す

Do While Loopステートメント、もしくは Do Loop Whileステートメントの場合、Exitステートメントを使ってループを抜けることができます。

以下のサンプルコードで確認してみましょう。

【サンプルコード】

Sub sampleExit()

    Dim str As String
    Dim count As Integer
    

    Do While count < 5
    
        If count > 2 Then
            Exit Do
        End If
    
        count = count + 1
        str = str & count & " "
        
    Loop
    
    MsgBox str

End Sub

【実行結果】

While Wendステートメントの場合や、ループを抜けるのではなく次のループにスキップさせたい場合には使用ができないので、その際は次の項目で紹介する GoToステートメントを使用する方法を使いましょう。

GoToステートメントで処理から抜けだす

GoToステートメントを使用すると、指定のラベルへ処理がジャンプします。
この機能を応用して、ループ内の処理をスキップしたり、While Wendステートメントで Exit と同様の処理を実行させることができます。

以下のサンプルコードで確認してみましょう。

【サンプルコード】

Sub sampleGoTo()

    Dim str As String
    Dim count As Integer

    Do While count < 5
    
        count = count + 1
    
        If count = 3 Then
            GoTo Continue
        End If
    
        str = str & count & " "
        
Continue:
    Loop
    
    MsgBox str

End Sub

【実行結果】

上記はループをスキップする場合のサンプルコードですが、ラベルの記述位置をループの外側にすればそのまま抜け出すことも可能です。

まとめ

いかがでしたか?今回は、Whileステートメントの使い方について解説しました。

それぞれの特徴を把握した上で、状況に応じて使い分けていきましょう!

関連記事

VBAの勉強方法は?

書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。

ただ、VBAに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。

プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。

<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~

このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。

     

Otherカテゴリの最新記事