ExcelVBA Do Whileによる繰り返し

「Excel VBAで繰り返し処理をしたい」という方、While~Wend、Do While~Loop、Do Loop~Whileを使いませんか?

繰り返し処理を手動でやると大変ですし、ミスが出てしまいます。

while文で自動化することで、速く、正確に処理をすることが可能になります。

この機会に、面倒な作業を自動化しちゃいましょう。

今回は、While~Wend、Do While~Loop、Do Loop~Whileの使い方から、途中で処理をスキップしたり、ループを抜ける方法についてもご紹介します。

こんなあなたにおすすめ
  • While~Wendの使い方を知りたい
  • Do While~Loopの使い方を知りたい
  • Do~Whileの使い方を知りたい
  • Do Loop~Whileの使い方を知りたい
  • 特定の条件で、ループを抜けたり、処理を飛ばしたい

While Wend の使い方

「While Wend」の使い方は、以下の通りです。

コード

While 条件式
    処理
Wend

条件式が”True”であれば、処理を実行し、条件式が”False”であれば、処理をせず、While Wendの次の処理に移行します。


参考
While…Wend ステートメントMicrosoft

実際のコードで見ていきましょう。

コード

Sub test()
    Dim i As Integer
    Dim msg As String
    
    i = 1
    While i < 3
        msg = msg & "処理回数:" & i & vbCrLf
        i = i + 1
    Wend
    
    Debug.Print msg
End Sub

MsgBoxの使い方については、以下の記事をご参照ください。
Excel VBA MsgBoxの使い方(基礎〜応用まで徹底解説)

実行結果

上の画像から分かるように、変数iが”2″までは、処理を実行し、変数iが”3″になったときに、条件式はFalseになるため、処理は実行されません。

コードの実際の手順は、以下の通りです。

手順1
変数定義
変数iに”1″を代入する
手順2
条件式 “True” or “False”
変数iが”3″未満なら処理を実行する
手順3
処理①
処理を実行する
手順4
処理②
変数iに”1″を加算する
手順5
ループ処理
「手順2」に戻る
注意

カウンタ変数を加算することを忘れてしまうと、条件式が永遠と成立するため、無限ループになってしまうので、気をつけましょう。

Do While~Loop の使い方

続いて、「Do While~Loop」の使い方についてご紹介します。

基本的な使い方は、以下の通りです。

コード

Do while 条件式
    処理
Loop

コードを見て分かるように、While~Wendとほとんど同じです。


参考
Do…Loop ステートメントMicrosoft

実際にコードを見ていきましょう。

コード

Sub test()
    Dim i As Integer
    Dim msg As String
    
    i = 1
    Do While i < 3
        msg = msg & "処理回数:" & i & vbCrLf
        i = i + 1
    Loop
    
    Debug.Print msg
End Sub

実行結果

上の画像から分かるようにWhile Wendと実行結果が一緒になっています。

「Whhile~Wend」と「Do While~Loop」は同じ動きをします。

どちらを使ってもよいのですが、「Do While~Loop」を使うことをおすすめします。

「Do While~Loop」の方が柔軟な処理ができ、「Exit Do」を使うことで、途中でループ処理を抜けることも可能だからです。

Do~Loop While の使い方

Do~Loop Whileの使い方は、以下の通りです。

コード

Do
    処理
Loop While 条件式

Do~Loop Whileは、Do While~Loopと違って、条件式のTrue、Falseに関わらず1度処理を実行します。

処理を実行した後、条件式のTrue、Falseによって、次のループ処理をするかが決まります。

実際のコードを見ていきましょう。

コード

Sub test()
    Dim i As Integer
    Dim msg As String
    
    i = 1
    Do
        msg = msg & "処理回数:" & i & vbCrLf
        i = i + 1
    Loop While i < 3
    
    Debug.Print msg
End Sub

実行結果

特定の条件で、処理をスキップする | GoTo

GoToを使うことで、ループの途中で処理をスキップすることができます。

GoToの基本的な使い方は、以下の通りです。

・GoToで前の処理に戻る

コード

ラベル名:
    GoTo ラベル名

・GoToで次の処理に進む

コード

    GoTo ラベル名
ラベル名:
コード

Sub test()
    Dim i As Integer
    Dim msg As String
    
    i = 0
    Do While i < 3
P1:
        i = i + 1
        If i < 3 Then
            GoTo P1
        End If
        msg = msg & "処理回数:" & i & vbCrLf
    Loop
    
    Debug.Print msg
End Sub

実行結果

if文の使い方については、以下の記事をご参照ください。
Excel VBA If文 複数条件の分岐処理は”Or”を使う!

変数iが”3″未満のときにif文の条件式が成立するため、GoToでラベル”P1″まで戻ります。

そのため、if文の条件式が成立する変数iが”3″のときのみメッセージが表示されています。

特定の条件で、ループを抜ける | Exit Do

特定の条件でループを抜けたいときは、“Exit Do”を使いましょう。

実際にコードを見ていきましょう。

コード

Sub test()
    Dim i As Integer
    Dim msg As String
    
    i = 0
    Do While i  2 Then
            Exit Do
        End If
        msg = msg & "処理回数:" & i & vbCrLf
    Loop
    
    Debug.Print msg
End Sub

実行結果

if文の使い方については、以下の記事をご参照ください。
Excel VBA If文 複数条件の分岐処理は”Or”を使う!

変数iが”3″未満のときにif文の条件式が成立しないため、ループ内の処理が実行されます。

変数iが”3″になったときにif文の条件が成立し、”Exit Do”により、ループ処理を抜けていることがわかります。

実は・・・

先ほどご紹介したGoToでもループ処理を抜けることができます。

GoToで設定したラベルをループ処理の後に書くことで、上に書いたExit Doと同じ動きをします。

コード

Sub test()
    Dim i As Integer
    Dim msg As String
    
    i = 0
    Do While i  2 Then
            GoTo P1
        End If
        msg = msg & "処理回数:" & i & vbCrLf
    Loop
    
P1:
    Debug.Print msg
End Sub

実行結果

まとめ

while文の使い方についてご紹介しました。

以下の注意点だけ忘れないようにしましょう。

注意

カウンタ変数を加算することを忘れてしまうと、条件式が永遠と成立するため、無限ループになってしまうので、気をつけましょう。

指定した回数で処理を繰り返したいという方は、for文の方が使いやすいです。

for文については、以下の記事をご参照ください。

xeory_basexeory_base

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です