「excel while複合条件」
「while文 vba 複数条件」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
VBA(Visual Basic for Applications)のループ文の一つ、Do Whileループで複数の条件を指定するには、どのような記述をすればいいのかを探していた方による検索キーワードです。
Whileキーワードの後ろに書く条件を、And演算子やOr演算子でつなげば複数条件にできますが、うっかり無限ループを書いてしまう方もいらっしゃいます。
Do While文による無限ループ
例えば、InputBoxに「end」または「stop」という文字列が入力されるまでループを繰り返す処理を、以下のように書いてしまう方がいらっしゃいます。
Dim tmp As String
Do
tmp = InputBox("文字を入力してください。")
Loop While tmp <> "end" Or tmp <> "stop"
「入力された文字列が end ではない、または stop ではない」という条件は、結局「すべての場合」といっているのと同じことですから、上記のマクロは無限にループしつづけてしまいます。
Do Until文によるループ処理
WhileではなくUntilを使って以下のような書き方をすれば、「end」または「stop」という文字列が入力されたときに、ループを抜けます。
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を必ず使うものだと思い込んでいた方は、以下のマクロをお試しください。
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文で複数条件