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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q冷やし中華をお弁当として持って行きたいのですが、麺が・・

こんにちわ。
いつもお世話になっております。

私は冷やし中華が大好きで、これからのシーズン、毎日でも飽きないほど好きです。
安くて美味しいし、アレンジもあれこれできるので、願わくば毎日の通勤のお昼ご飯として持って行きたいなぁ、と考える今日この頃です。

が、なんといってもネックは『麺』です。家庭やお店でできたてを食べる様に『ツヤツヤのシコシコ!』とまではいいません。コンビニで売ってる状態程度でいいですので、家庭から麺を持って行けないものかと思案しています。
どんな麺をどんな風にゆでたら、そして、どんな風に処理(お弁当詰め)したら、お昼まで美味しく保てますでしょうか?
知恵や経験をおもちの方、お教え下さい。

ちなみに、職場には冷蔵庫と冷凍庫と・・・関係ないかもしれないけど、電子レンジとオーブントースターと熱湯がスタンバイしているポットがあります。
自宅から職場まで、ドアtoドアで1時間です。

Aベストアンサー

こんにちは。

私もお弁当に冷やし中華持参いたします。

麺は普通に茹で、ゴマ油を少量まぶす。
(ゴマ油が苦手な場合は生でもOKのサラダオイルでも可)
タッパーに麺と具を入れる。
タッパーの上下(蓋と底)に保冷剤をつける。
タレ(液)は別の容器に入れる。

という方法です。
オフィスの冷蔵庫に入れる時、保冷剤は外します。

ご参考になれば幸いです。

QEXcel VBAのFor~Nextステートメントで質問です

初歩の初歩ですがお願いします。
3から13行目をデータのある最終行の下に
20回コピーをしていきたいのですが、
(3から13行のデータの複製を20個用意
したいということです)
つまずいています。iとしてみたのですが
、何をiとして実行させるのか分かりません。
教えていただけないでしょうか?

Sub test()
Dim i As Integer

For i = ● To ●

  Rows("3:13").Copy
  Worksheets("Sheet1").Range("A65536") _
  .End(xlUp).Offset(1).Select
  ActiveSheet.Paste
 Application.CutCopyMode = False
  Next i
  
End Sub

Aベストアンサー

修正版
Sub test()
Dim i As Integer
Dim n As Integer
Dim RangeSrc As Range
Dim RangeDst As Range
Set RangeSrc = Worksheets("Sheet1").Rows("3:13")
n = Cells(65536, 1).End(xlUp).Row
If n <= 13 Then n = 14
For i = 1 To 20
Set RangeDst = Worksheets("Sheet1").Rows(n + 1 + (i - 1) * 11)
RangeSrc.Copy Destination:=RangeDst
Next i
Set RangeSrc = Nothing
Set RangeDst = Nothing
End Sub

Qお弁当

またまた、ばんブゥ

お弁当・・・おかずの定番はたまご焼きでしょうか
まぁ、みなさんが一番うれしいのは、どんなお弁当ブゥ?

なんて、アンケしても、おもしろくないので、・・・
みなさんが、ぜったい、絶対、ぜったい嫌なのは、どんなお弁当ブゥ?

というアンケをすることにしたですブゥ

とりあえず、子ブたんは、お弁当がラーメンだったら、嫌ですブゥ
だって、食べるころには、汁もなく・・・麺がのびているからですブゥ

Aベストアンサー

師匠の弁当。

食べたくねー…。
(-_-;)

Qifステートメント notと!は同じ意味ですか?

VBAのifステートメントで、notと!は同じ意味ですか?

「a」で始まらない。
と言う意味で、下記のコードを作ったのですが、どちらも思い通りの結果が得られます。

If "あabc" Like "[!a-z]*" Then
Debug.Print "OK"
End If

If Not "あabc" Like "[a-z]*" Then
Debug.Print "OK"
End If

End Sub

ネットからのサンプルをコピペしたので、いまいち理解できてないのですが
notと!は同じ意味ですか?

Aベストアンサー

結果的には同じ動作になっていますが、それは条件が一つだけだったからで、条件が複数ある場合に差が出ます。

Like演算子の中の!はその文字以外という意味で、効力は自分に対してだけです。一方、Not演算子の場合は式の結果を反転させますが、カッコを使うと影響範囲を変えることが可能です。

If "12345" Like "!0" And "!6" Then Debug.Print "OK
→結果はOKと表示

If Not ("12345" Like "0" And "6") Then Debug.Print "OK
→結果はOKと表示

If Not "12345" Like "0" And "6" Then Debug.Print "OK
→何も表示されない(If "12345" Like "!0" And "6" …と同じ意味になるから)

なので、どっちで書いた方が解りやすいか?という観点で選ぶ感じですかね。ただNotの場合はこの例でもありますが、カッコの付け忘れや付ける位置の間違いで結果が違って来るので、注意しないと自分でもよくわからんことになりがちです。

結果的には同じ動作になっていますが、それは条件が一つだけだったからで、条件が複数ある場合に差が出ます。

Like演算子の中の!はその文字以外という意味で、効力は自分に対してだけです。一方、Not演算子の場合は式の結果を反転させますが、カッコを使うと影響範囲を変えることが可能です。

If "12345" Like "!0" And "!6" Then Debug.Print "OK
→結果はOKと表示

If Not ("12345" Like "0" And "6") Then Debug.Print "OK
→結果はOKと表示

If Not "12345" Like "0" And "6" Then Debug.Print "OK
→何も...続きを読む

Q1人暮らしのお弁当を安く・手頃にできないでしょうか

こんにちは。
札幌で一人暮らしをしています。21歳女(OL)です。
一人暮らしのお弁当作りについて、アドバイスをいただきたく書き込みいたしました。
 
晩ご飯はほぼ自炊できているのですが、どうもお弁当だけは続きません(泣)
低い予算で、時間をかけず、楽なお弁当作りが理想です。
前の日の晩ご飯を入れる、焼きうどんやラーメンサラダなど一品物にする、
お弁当が面倒でもおにぎり1つは持つようにする等の工夫(とまで言えないかもしれませんが…)はしているのですが、これでもなかなかうまく取り入れられませんT T
最近はせめて予算を抑えようと、スーパーで安く売っていたカップ麺を持って行ったり
買ってもパンくらいにしていますが…、身体に悪いのでなんとかしなきゃと思いました><;
 
おすすめのメニューやおすすめのレシピ本、
続けるコツなど、なにかアドバイスをいただけたら幸いです。
また、お弁当作りのためにどれくらいの時間をかけているかもお聞きしたいです(^^)
 
宜しくお願いいたします。

Aベストアンサー

私も同じです。
朝夕は何とか作れるんですが、お弁当生活はなかなか続きません><
20歳でよくそこまでがんばっていますね。むしろ自分をほめてあげてください^^

私が一時期お弁当をもっていたときには、とにかく平日はお弁当に時間をかけないように心がけました。
私の場合は仕事をしているので、時間を取れるのが休日だけだったと言うこともあります。

そこで私が取った方法は下記の通りです。
(1)冷凍or腐り難いものを週末に1週間分作る。
・ミニトマトのマリネ。 (酢の物なので悪くなりにくい。)
  ※生で使用するのもいいと思います。単に私が生のトマトが好きではないのでこうなりました・・・
・キンピラ等冷凍食品コーナーにあるものを参考に作る。
  ※冷凍食品は冷凍できるものですので、メニューの参考になります。
(2)当日作る場合は、和えるだけで済むような簡単なものにする。
・かぼちゃの黒胡麻和え。(冷凍カボチャを使用) 
  url : http://cookpad.com/recipe/877170
・ブロッコリーのチーズ焼き(冷凍ブロッコリー使用) 
  ブロッコリーにチーズを乗せて焼いただけです・・・。ブロッコリーを色々アレンジしてみてください^^
(3)メインとなるものは、夕飯を多めに作って使用する。
 夕飯が作れないorお弁当に適さない場合のために、お弁当サイズの鮭とか冷凍保存しておき、
 焼くだけの状態にしておく。


色合いも考えながら作ると少し楽しくなります。
私はお弁当作れていないので説得力は無いですが、少しでも参考になれたらと思います。

私も同じです。
朝夕は何とか作れるんですが、お弁当生活はなかなか続きません><
20歳でよくそこまでがんばっていますね。むしろ自分をほめてあげてください^^

私が一時期お弁当をもっていたときには、とにかく平日はお弁当に時間をかけないように心がけました。
私の場合は仕事をしているので、時間を取れるのが休日だけだったと言うこともあります。

そこで私が取った方法は下記の通りです。
(1)冷凍or腐り難いものを週末に1週間分作る。
・ミニトマトのマリネ。 (酢の物なので悪くなりにくい。)
 ...続きを読む

Q指定したセルに1がない時、For を抜けたいのですが・・・

Office XP Personal 2002
Excel 2002

指定した範囲セルに1がない時、下記の1つの For だけ を抜けたいのですが・・・
どのように変更すればよろしいでしょうか?
よろしくお願い致します。

Sub test()
Dim i As Integer
Dim n As Range

For i = 1 To Worksheets.Count - 1
 Worksheets(i).Activate

 For Each n In .Range("E6", .Range("E6").End(xlDown))

  If Not n.Cells.Value = 1 Then
  End If
  Next n
   MsgBox "「1」 がありません。", 48
  Exit For

 'For Each n In .Range("E6", .Range("E6").End(xlDown))
  '続く
  '・ 
  '・
End Sub

Aベストアンサー

たぶん、やりたいことは範囲に1があったら次のシートに移り、なければメッセージ表示だとおもいますが、それなら
Sub test()
Dim i As Integer
For i = 1 To Worksheets.Count - 1
 Worksheets(i).Activate
 x = Application.WorksheetFunction.CountIf(.Range("E6", .Range("E6").End(xlDown)),1)
If x = 0 Then MsgBox "「1」 がありません。", 48
Next i
End Sub

Qパスタをお弁当に持っていきたい!!

自分で作ったパスタをお弁当に持って行きたいと思います。
会社には電子レンジがありますので、ソースと麺を別々に持って行き温めようと思っています。

ソースは手作りのものを用意するとして、問題は麺なのですが、、、
茹でた麺は時間が経ったらくっついてしまい、まずいでしょうか?
くっついてしまった麺を美味しくする方法、
または、レトルトでもいいので、電子レンジで温めるだけでできる麺を知ってる方、
教えてください。

Aベストアンサー

以前会社の他部署の上司が、社内のパーティーでやっていた方法が、参考になれば。
とってもおいしくて、ビックリでした。

1、家で
麺を普通にアルデンテにゆでる。
軽く冷まして、ジップロックのような袋に入れる。
2、食べる時
パスタを袋に入れたまま、熱湯で温める。
(当社、ガスレンジ等がないので、ポットのお湯を桶?に入れてしばらく付けてました。)
ミートソースを電子レンジでチン。
まぜまぜして、(ミートソースは熱々だから調度よくなる)お皿に盛る。

全く硬くもなく、柔らかすぎず、調度いいパスタでした。
熱湯で温めるのが、どうもコツらしいです。

QVBAのfor...next構文で i = A to Z としたい。

VBAでfor...next構文で通常 
for i = 1 to 100
などとしますが、それをA~Zまでとする場合どのようにすればよいでしょうか?

Aベストアンサー

#1です。
ごめんなさい。先のマクロに致命的なミスがありました。
正しくは

Dim c as String
For i = 0 To 25
  c = Chr(i + 65)

です。お詫びして訂正します。
さて

c = Chr(i + 65)

の解説ですが、

Chr は、与えられた文字コードに該当する文字を返す関数です。
半角大文字の「A」のコードは65です。
「i」は0から25までの値をとりますので、「i+65」とするわけです。

ちなみに、

Dim c as String
For i = 65 To 90
  c = Chr(i)

としても良いでしょう。

Q固焼きそばはお弁当に向いてる?

かたやきそばの具と麺を別々にして
行楽のお弁当に持っていこうと思っています。
具が冷めても、おいしいと思いますか?

Aベストアンサー

おいしくないと思います。
この季節は寒いし、冷たいあんかけに冷えた固焼きそばをバリバリなんて最悪だと思うですよ(涙)

QDo~Loopステートメント

Do~Loopステートメントで使わな方が良いステートメントとは?

Do~Loopステートメントで「古いから使わない方がよい」、と言われたことがあるのですが
どれの事だか忘れてしまいました。

Sub test()
セルのA1~A10に1~10を入力する
i = 1
Do While i < 11
Worksheets("Sheet1").Cells(i, 1).Value = i
i = i + 1
Loop
End Sub

これは一般的だから使ってもよいと思います。

Sub test()
セルのA1~A10に1~10を入力する
i = 1
Do Until i = 11
Worksheets("Sheet1").Cells(i, 1).Value = i
i = i + 1
Loop
End Sub

これもよく見かけます。

Do While,Do Until以外にもloopステートメントってありますか?
あと使わない方が良いステートメント、私の勘違いでなければ教えてください。

Do~Loopステートメントで使わな方が良いステートメントとは?

Do~Loopステートメントで「古いから使わない方がよい」、と言われたことがあるのですが
どれの事だか忘れてしまいました。

Sub test()
セルのA1~A10に1~10を入力する
i = 1
Do While i < 11
Worksheets("Sheet1").Cells(i, 1).Value = i
i = i + 1
Loop
End Sub

これは一般的だから使ってもよいと思います。

Sub test()
セルのA1~A10に1~10を入力する
i = 1
Do Until i = 11
Worksheets("Sheet...続きを読む

Aベストアンサー

> 使わない方が良いステートメント

もしかしたらなのですが、そう言われたのは、「Do Loop」ではなく
「While Wend」ステートメントではないでしょうか。
http://msdn.microsoft.com/ja-jp/library/cc392467.aspx

これであれば、上記サイトの『解説』の中の『メモ』にもある通り、
「Do...Loop ステートメントを使用すると、より構造化された柔軟な
ループを記述することができます」ということで、敢えて使う必要は
ない、ということになるかと思います。
(要は、「Do Loop」の終了条件の「While」と、「While Wend」の
 「While」が混同されて記憶に残ってしまったのではないか・・・と)


なお、「Do Loop」と「For Next」の処理速度については、こちらの
サイトが参考になるかと思います:
http://www.tsware.jp/labo/labo_17.htm


人気Q&Aランキング

おすすめ情報