「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になるため、処理は実行されません。
コードの実際の手順は、以下の通りです。
カウンタ変数を加算することを忘れてしまうと、条件式が永遠と成立するため、無限ループになってしまうので、気をつけましょう。
Do While~Loop の使い方
続いて、「Do While~Loop」の使い方についてご紹介します。
基本的な使い方は、以下の通りです。
Do while 条件式
処理
Loop
コードを見て分かるように、While~Wendとほとんど同じです。
実際にコードを見ていきましょう。
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文については、以下の記事をご参照ください。