- ベストアンサー
[Excel VBA]Doloop途中のifで処理を飛ばすには
久しぶりにお世話になりたいのですが・・・ Do Until 条件 何らかの処理 If条件 Then 何らかの処理 Elseif条件 Then 何らかの処理 Else 何らかの処理 (1) End if 何らかの処理 Loop というような構文を作った際に(1)のところ(Elseに適合した 場合のみ)でEnd if以下の処理を飛ばして次の周回(? 要はDo~の 最初のところに戻る)にはどうすればよいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1)Goto文でループ末尾にジャンプする。 2)フラグ変数を使って、ELSEの時はフラグ変数をfalseにし、何らかの処理を実行するかを判定する。 3)ループ内部の処理を別サブルーチンにし、ELSEの場合Exit Subする。 ――とか。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 #1さんがすでに書いていますが、ループの中だけを抜き出して、サブルーチンにするとか?他人から批判をされないコードに近くなるとは思います。ただ、VBAでは、別に、Goto で、元のラベルに戻っても良いです。プライベートの世界では、それがいけない決まりなんてありまんせからね。 ただ、実際のコードでは、また違う考え方も出てくるような気がします。ある意味では、机上の話です。 '---------------------------------------------------------- Sub ParentPrc() Dim i As Long Dim MaxNum As Long MaxNum =最大値 For i = 1 To MaxNum 'またはループ ChildPrc i '参照渡し Next i End Sub Private Sub ChildPrc(ByRef i As Long) '念のため-ByRef Do Until 条件 何らかの処理 '←たぶん、ここにカウンターがあるので、取る If条件 Then 何らかの処理 Elseif条件 Then 何らかの処理 Else 何らかの処理 Exit Sub End if 何らかの処理 Loop End Sub '----------------------------------------------------------
お礼
アドバイスありがとうございます。 結局Goto文を使うことにしました。 今、私がやりたいようにするにはこれが一番楽だったので。 代案を示していただいたのに申し訳ないです。
美しくなければプログラムではないということで・・・。 Do Until 条件 何らかの処理 If条件 Then 何らかの処理 XXXXX Elseif条件 Then 何らかの処理 XXXXX Else 何らかの処理 End if Loop Private Sub XXXXX End Sub
お礼
アドバイスありがとうございます。 変数をいろいろ再設定するのが面倒くさい(汗)ので GoTo文を使ってしまうことにしました。 せっかくアドバイスくださったのに申し訳ないです。
お礼
アドバイスありがとうございます。 結局1)の「Goto文でループ末尾にジャンプする。」 が一番簡単にできるところを重視して使うことにしました。 いろいろな手段を考えていただきありがとうございます。