• ベストアンサー

[Excel VBA]Doloop途中のifで処理を飛ばすには

久しぶりにお世話になりたいのですが・・・ Do Until 条件 何らかの処理 If条件 Then 何らかの処理 Elseif条件 Then 何らかの処理 Else 何らかの処理 (1)  End if 何らかの処理 Loop というような構文を作った際に(1)のところ(Elseに適合した 場合のみ)でEnd if以下の処理を飛ばして次の周回(? 要はDo~の 最初のところに戻る)にはどうすればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

1)Goto文でループ末尾にジャンプする。 2)フラグ変数を使って、ELSEの時はフラグ変数をfalseにし、何らかの処理を実行するかを判定する。 3)ループ内部の処理を別サブルーチンにし、ELSEの場合Exit Subする。 ――とか。

oyasaisanba
質問者

お礼

アドバイスありがとうございます。 結局1)の「Goto文でループ末尾にジャンプする。」 が一番簡単にできるところを重視して使うことにしました。 いろいろな手段を考えていただきありがとうございます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 #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 '----------------------------------------------------------

oyasaisanba
質問者

お礼

アドバイスありがとうございます。 結局Goto文を使うことにしました。 今、私がやりたいようにするにはこれが一番楽だったので。 代案を示していただいたのに申し訳ないです。

noname#22222
noname#22222
回答No.2

美しくなければプログラムではないということで・・・。 Do Until 条件   何らかの処理   If条件 Then     何らかの処理     XXXXX   Elseif条件 Then     何らかの処理     XXXXX   Else    何らかの処理   End if Loop Private Sub XXXXX End Sub

oyasaisanba
質問者

お礼

アドバイスありがとうございます。 変数をいろいろ再設定するのが面倒くさい(汗)ので GoTo文を使ってしまうことにしました。 せっかくアドバイスくださったのに申し訳ないです。

関連するQ&A