• ベストアンサー

ExitでIFステートメントを抜けたい

Sub test() Dim n As Byte, i As Byte For i = 0 To 5   If n = 0 Then    n = n + 1   Else    Exit For '(1)ここから   End If i = i + 1 '(2)ここへ来たい(IFステートメントだけ抜けたい) Next i End Sub のように(1)から(2)へ行きたいのですが このコードを実行すると Forステートメントを抜けてしまい、マクロが終了してしまいます。 「Exit If」にするとエラーになってしまいます。 Exitを使用してIFステートメントだけ抜け、 Forステートメントに戻るにはどうすればいいでしょうか? ご教授よろしくお願いします。

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

  • ベストアンサー
  • okdeath
  • ベストアンサー率28% (13/46)
回答No.5

こんにちわ。 VBAを使わないので書き方のルールがよくわからないのでエラーがでるかもしれませんが、i=i+1の場所がよくないんじゃないでしょーか? nが0の時だけiに2を足したい。 nが0以外のときはiに1を足したい。 このようにしたいと考えているのではないでしょーか? ↓こんな感じに変えたらどうでしょう?(素人なんで変だったらごめんなさい。) Sub test() Dim n As Byte, i As Byte ←よくわからないのでそのまま^^; For i = 0 To 5   If n = 0 Then    n = n + 1 i = i + 1 ←ここに入れたらどーでしょー?(elseは不要っぽい)   End If Next i End Sub あとは書き方分かる方おねがいします。

nifufu2
質問者

お礼

ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.6

If ~ End If は、ループじゃないので、Elseで何もしなければ、そのまま(2)に行きますよ。 ちなみに、Exit For で Forステートメント(Forループ)を抜けるのは、当たり前ですね。そういう命令なので。

nifufu2
質問者

お礼

If ~ End Ifはループじゃないんですね。 ありがとうございます。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

>Dim n As Byte, i As Byte バイト型のこと http://www.sdls.jp/~barista/tech/vba/g0.html に初心者は使わないと。 これを使えるレベルなら、本質問など、出ないだろう。 ーー コードだけ書くのでなく、何がやりたいのか「文章で」書くべき。書かないから、回答者から推測的な回答が出ているように思う。 それにエクセルの処理に絡んだ問題を抱えているのではないか。 そうであればセルとの関連で質問を書くべき。 例 Sub test01() Dim i, j As Integer For i = 1 To 10 For j = 1 To 5 'MsgBox i & "-" & j & Worksheets("Sheet4").Cells(i, j) If Worksheets("Sheet4").Cells(i, j) <> "" And Worksheets("Sheet4").Cells(i, j) = 0 Then Worksheets("Sheet4").Cells(i, j) = 1 Exit For End If Next j Next i End Sub ーーー 例データ A1:F5 結果元は1のところは0、-は空白セル。 1 ー ー 0 ー ー ー ー ー ー ー ー 1 ー ー ー ー ー ー ー ー ー 1 0 ー ーーーーー 最悪、Gotoステートメントも使うぐらいの融通性を持ったら。 -- >i = i + 1 Forループの中でカウンタ変数をいじくるのは、追跡をややこしくする。 ーー Nが0ならば、Nを1にするでよいのでは。 n = n + 1なんて書かず。 ーー nが0出なければこの処理をやめる、のだから If n=0 then n=1

nifufu2
質問者

お礼

バイト型は使わないほうがいいのですね。 勉強になりました。 ありがとうございます。

すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

一般的にFor~Nextのなかで i を加工することはあまりしません。それは後からわかりにくくなるからです。 (例外的に強制的にFor~Nextを抜けるために i に大きな値をセットすることはありますが、VBAではExit For文があるので必要性は薄いです) 質問文を単純に書き直すと以下になりますが、正直なところ何をしたいのかよく分からないので、これで良いか自信はありません。 Sub test() Dim n , i As Integer For i = 0 To 5 Step 2   If n = 0 Then    n = n + 1   End If Next i End Sub

nifufu2
質問者

お礼

ありがとうございます。

すると、全ての回答が全文表示されます。
noname#96023
noname#96023
回答No.2

forの条件は例なのでしょうか? 2回目のループでは必ずnが0じゃないので そもそもforは不要なんですが

nifufu2
質問者

お礼

一度見直してみます。

すると、全ての回答が全文表示されます。
  • KDASH-XP
  • ベストアンサー率45% (62/135)
回答No.1

上述の場合Else文が不要になるのではないでしょうか? 分岐処理の条件を記述するのがIf文ですので、抜けるのではなく、始めから入らない、が正解です。

nifufu2
質問者

お礼

あれ? 確かにそうですね。 ちょっとコードを見直してみます。

すると、全ての回答が全文表示されます。

関連するQ&A