Home » エクセルマクロ・Excel VBAの使い方 » Do While文で複数条件

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「excel while複合条件」
「while文 vba 複数条件」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

VBA(Visual Basic for Applications)のループ文の一つ、Do Whileループで複数の条件を指定するには、どのような記述をすればいいのかを探していた方による検索キーワードです。

Whileキーワードの後ろに書く条件を、And演算子やOr演算子でつなげば複数条件にできますが、うっかり無限ループを書いてしまう方もいらっしゃいます。

[スポンサードリンク]

Do While文による無限ループ

例えば、InputBoxに「end」または「stop」という文字列が入力されるまでループを繰り返す処理を、以下のように書いてしまう方がいらっしゃいます。

Sub Do_Whileループの複数条件_無限ループになるケース()
 Dim tmp As String

 Do
  tmp = InputBox("文字を入力してください。")
 Loop While tmp <> "end" Or tmp <> "stop"

End Sub

「入力された文字列が end ではない、または stop ではない」という条件は、結局「すべての場合」といっているのと同じことですから、上記のマクロは無限にループしつづけてしまいます。

Do Until文によるループ処理

WhileではなくUntilを使って以下のような書き方をすれば、「end」または「stop」という文字列が入力されたときに、ループを抜けます。

Sub Do_Untilループの複数条件()
 Dim tmp As String

 Do
  tmp = InputBox("文字を入力してください。")
 Loop Until tmp = "end" Or tmp = "stop"
End Sub

Do Loop文の中にIf文を書いてループを抜けるサンプルマクロ

上記の例では、Until条件にすればOKでしたが、非常に複雑な条件によってはUntil条件でも書き辛いケースがあるでしょう。

Do~Loop文では、WhileかUntilを必ず使うものだと思い込んでいた方は、以下のマクロをお試しください。

Sub Do_Loop文の複数条件()
 Dim tmp As String

 Do
  tmp = InputBox("文字を入力してください。")
  If tmp = "end" Or tmp = "stop" Then Exit Do
 Loop
End Sub

Do~Loop文の中にIf文が存在し、条件に合致したときにDo~LoopをExitする処理が入っています。
  If tmp = "end" Or tmp = "stop" Then Exit Do

Do Whileループ・Do Untilループというのは、この条件文がWhileやUntilの後ろに書かれているだけ、と考えるほうが理解しやすいと感じる方は、少なくないはずです。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Do While文で複数条件

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.