• 締切済み

【VBA】DoUntil Loopを1度のみ実行

いつもお世話になっております。 Excel2003を使用しております。 「この条件になるまで続行」というのは Do Until Loop だと思うのですが、 ループをしたくないけれど Do Until Loop を利用したい場合(条件になったら即終了したい) Do Until Flag=True 実行したいこと 実行したいこと2 実行したいこと3 Exit do Loop また、やりたいこととしては、 FlagがTrue になったら、プロシージャから抜けたいと思っています。 その場合は、 Do Until Flag=True  実行したいこと  実行したいこと2  実行したいこと3  Exit do Loop If Flag=True Then   Exit sub End if このように、別々?に書く以外に方法はないでしょうか? 出来れば、簡単なIF文で実行できないかと思ったのですが… 話がごちゃごちゃしていて分かりにくいので、質問事項のみまとめますと、 ● 条件になったら終了させる。 これは、Do~Loop 、For Next のみの動作でしょうか? ● ループから抜けると同時にSubを終了させるには、ループの外にIF文を書くしかない? 以上、よろしくお願い致します。

みんなの回答

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1です。質問内容をはき違えてたかもしれません。 なぜ一度の処理を行うために繰り返し処理を行いたいのか分かりませんが。。。。 Do~Loopの条件判定をLoopの後に記述することで 最低1回はループ内が処理されます。 Sub test() Flag=True Do   実行したいこと   実行したいこと2   実行したいこと3 Loop Until Flag=True End Sub

satoron666
質問者

お礼

再度回答ありがとうございます! FlagがTureになったらループを抜けたい! そう書けばよかったかと反省しております。 ありがとうございました^^

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

Do~Loop内でExit Doを記述するのは無限ループ回避のための保険みたいな利用になるかとおもいます。 ですので、ご提示の処理のようにDo~Loopの中にIf文と組み合わせずに Do Until Flag=True  実行したいこと1  実行したいこと2  実行したいこと3  Exit do Loop を記述すると、以下と同じ意味になりますので繰り返し処理になっていませんが。 If Flag=False Then  実行したいこと1  実行したいこと2  実行したいこと3 End If Do~loopステートメントでは以下の条件が利用できます。 『While』ステートメントの繰り返し - 条件が真 (True) の間 『Until』ステートメントの繰り返し - 条件が真 (True) になるまで Do Until Flag=True   実行したいこと1   実行したいこと2   実行したいこと3 Loop '続きの処理 End Sub と記述すれば「実行したいこと1~3」の処理の中で変数「Flag」が「True」になれば 「実行したいこと3」の直後に「Flag=True」が判断されて 条件を満たすと「Loop」の次の行に処理が移動します。 ですので、For~Nextステートメントの途中でIf文によりループを抜ける「Exit For」のような 記述は不要になりますが、終了条件を確実に行わないと 無限ループに陥りやすくなります。 FlagがTrueになればループを抜ける FlagがTrueになればプロシージャを終了させる     ↓ ループを抜ければプロシージャを終了させる ということになるので、上記の記述になります。

satoron666
質問者

お礼

回答ありがとうございます! 色々説明下手で申し訳ありません。 やりたいこととしまして、 「Flag=Trueになったら即座にループを脱出」 したいと思っております。 何を実行中だったとしても、 ループを抜けれたら今現在取り組んでいるプログラムが 上手く回りそうな気がしたため、質問させて頂きました。 ありがとうございました!

関連するQ&A

専門家に質問してみよう