重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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ステートメントに戻るにはどうすればいいでしょうか?

ご教授よろしくお願いします。

A 回答 (6件)

こんにちわ。


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

あとは書き方分かる方おねがいします。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2009/05/14 21:12

If ~ End If は、ループじゃないので、Elseで何もしなければ、そのまま(2)に行きますよ。



ちなみに、Exit For で Forステートメント(Forループ)を抜けるのは、当たり前ですね。そういう命令なので。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/14 21:12

>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ーー
ーーーーー
ーー10ー
ーーーーー
最悪、Gotoステートメントも使うぐらいの融通性を持ったら。
--
>i = i + 1
Forループの中でカウンタ変数をいじくるのは、追跡をややこしくする。
ーー
Nが0ならば、Nを1にするでよいのでは。 n = n + 1なんて書かず。
ーー
nが0出なければこの処理をやめる、のだから
If n=0 then n=1
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/14 21:12

一般的に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
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2009/05/14 21:11

forの条件は例なのでしょうか?



2回目のループでは必ずnが0じゃないので
そもそもforは不要なんですが
    • good
    • 0
この回答へのお礼

一度見直してみます。

お礼日時:2009/05/14 21:11

上述の場合Else文が不要になるのではないでしょうか?


分岐処理の条件を記述するのがIf文ですので、抜けるのではなく、始めから入らない、が正解です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/14 07:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!