• ベストアンサー

VB For-Next文でのExitではなく中断は可能?

kmb01の回答

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.5

比較関数が呼ばれるタイミングがすべて同じならNo4の方法でいいのでしょうが、 For i = 1 To 10 If judge1(i) = True Then proc1 If judge2(i) = True Then proc2 End If End If Next i などのようにproc1の結果がjudge2に影響する場合もあります。 No3の方法が優れているように思いますが、関数を作りたくない場合は For i = 1 To 10 LOOPTOP: If judge1(i) = False Then i = i + 1: GoTo LOOPTOP proc1 If judge2(i) = False Then i = i + 1: GoTo LOOPTOP proc2 Next i のようにGoTo文で済ませることが出来ます。

sky_blue
質問者

お礼

お返事ありがとうございます。 なるほど、カウンタを増やした上でGoTo文を使うという手もあったのですね! 先の方の「別関数」もそうですが、1つ1つは知っているのに、それを思いつかない・・・。 もっと頭を柔らかくしないとダメですね! ここで皆さんに教えて頂いた事を覚えておいて、次に困った時は、自分でアイディアを出せるように頑張ります! ありがとうございました(^^)

関連するQ&A

  • For ~ Next の使い方

    for ~ next 構文の途中でカウンターを進めることはできますか。 For I=1 to 10 処理 if ~ then next 処理 next このようにすると、エラーになります。 仕方なく次のようにしていますが、もっと良い方法はありますか。 For I=1 to 10 処理 if ~ then goto 次の行へ 処理 次の行へ: next

  • for文の使い方

    for文の中にif文を入れて使いたいのですが「Nextに対するforがありません」となりエラーが出てしまいます。どうしたらよいのでしょうか? If Option1.Value = True Then For i = 2 To 10  If xlSheet.Cells(i, 2).Value > 10 Then Form2.List1.AddItem xlSheet.Cells(i, 1) Next i End If End If

  • vbsのfor文に対する質問です。

    vbsのfor文に対する質問です。 Javaでいうところのbreak文と同様の処理はどのようにすれば良いのでしょうか? 例) For i=1 to 10 step 1   If str = "" Then    // for文を抜ける処理   End If next

  • VBA For~Next 

    「wsData」の値を「wsInv」の指定セル(=●●●=16)から4つおきに処理したい。 01:Cells(16 + i * 4, 1) とすると「i」が大きいときに   「""」があると16からスタートしない 02:「For k = 0 To 50」を作成したが、何処に入れても上手く処理出来ない。 For i = 0 To 50 '行 For j = 6 To 28 '列 If wsData.Cells(10 + i, 3).Value = "" Then wsInv.Cells(●●●, 1).Value = wsData.Cells(10 + i, 1).Value wsInv.Cells(●●●, j - 2).Value = wsData.Cells(10 + i, 23 + j).Value End If Next j Next i お力添えをお願いいたします。

  • Forループの制御について

    VB 2005,Framework2.0を使用しています。 For文を使ったループについてお尋ねしたいことがあります。 For i As Integer = 0 To 10     ’処理 Next i とあったとします。 そうするとループ変数iが0から10になるまで連続してループを行うのですが、これをある条件の時に現在のループ変数から一つ飛ばして次のループからまた処理を行いたい場合どのようにすれば良いのでしょうか? 例えば0~10回中に、現在5回目で特定の条件が一致したときその次の6回目のループは飛ばして7回目のループから再開したいです。 ちなみにこの様に書いても0から10回必ずループされてしまいました。 Dim TEST(10) As Integer TEST(5) = 1 For i As Integer = 0 To 10 If TEST(i) = 1 Then i = i + 1 End If Next i

  • For~Nextステートメント  途中で止めるには

    For~Nextステートメント で、変数が5なら止めたいのですがIFを使わない方法があったと思うのですが、 忘れてしまいました。 今は、 +++++++++++++++++++++++++++++ Sub test() Dim i As Long For i = 2 To 10 If i = 5 Then Stop End If Next End Sub +++++++++++++++++++++++++++++ としていますが、 If i = 5 Then Stop End If じゃなくても、一つのメソッドで出来た気がするのですが、 わかる方いらっしゃいますか? ご回答よろしくお願いします。

  • loopを抜け出すには Exit Forですが

    loopを抜け出すには Exit Forですが loopの次のサイクルに行くには? For i=1 to 10 . Exit For . . Next i 今、i=5を実行中とします 以下の処理をスキップして i=6に行くには、なにかありませんか 普通はIf文で処理するとおもいますが

  • どうやってもFor文を抜けてしまいます…(VBA)

    いつもお世話になっております。 VBAで作業をしていたところ、とある箇所でずっと詰まってしまい、 また皆様のお力を借りたいと思い・・・。 おそらく、基礎中の基礎かもしれませんが、お付き合い頂ければ助かります;; 【質問内容】 Functionが2つあったとします。 現在のFunctionから、別のFunctionに飛んで、また元のFunctionに戻ってきた際に、 Forでループ中でも抜けてしまうのでしょうか? おそらく、何を言ってるか分からないと思いますので、以下にコード例を記載します。 _________________________________ 【コード例】 function sample1() Dim roop as Long ’シート1のCell(7,4)には「100」と入力されており、「roopが2~100」の間ループさせます。 for roop + 2 To sheets("シート1").cells(7,4) 処理2 ’特定条件を満たしたら、「sample2」に飛びます。 if 条件 then call sample2 End If next End function _________________________________________________________________________________________ function sample2() ’sample1()で使用していたroop変数をそのまま使用します for roop + 1 To 50 処理2 roop + 1 next ’処理が終わりsample1()のnextに戻ります。 ’roopには、仮に50が格納されているとします。 End function _________________________________________________________________________________________ 上記のコードとなります。 最初はSample1()で処理を行い、特定条件を満たしたらSample2()に移行。 Sample2()の処理が終わったら、元のSample1()に戻る。 2つのFunction内で使用していた「roop」変数は、まだ80にも関わらず、 Sample1()のFor文を抜けてしまいます。 Sample1()のForのループ条件は「2~100」としていますが、 これは別のFunctionに飛ぶと、無くなってしまうのでしょうか? 何を言っているのか分からないなどございましたら、ご指摘ください・・・;; 以上、よろしくお願いします。

  • テキストボックスの番号を使ったFor~Next文について

    宜しくお願い致します。 エクセルのマクロのフォーム上にtextbox1~textbox10を作成してあります。 これら全てがきちんと入力されているかどうかを調べる命令を書きたいと思っております。 どのようにすればよろしいのでしょうか? 【エラー表示される私の考え】 For i = 1 To 10 If TextBox("& i & ").Value = "" Then MsgBox ("データを再度入力してください。") Exit Sub End If Next i if文のところでエラーが出ます。textboxの表示方法がまずいと思うのですが、どうすればよいのかわかりません。ご指導の程宜しくお願い致します。 なお、For~Next文を使わない方法でも構いません。

  • VB Forから抜ける

    Data1(1, 1) = "りんご" Data1(1, 2) = "みかん" Data1(2, 1) = "なし" Data1(2, 2) = "オレンジ" Data2(1, 1) = "バナナ" Data2(1, 2) = "みかん" Data2(2, 1) = "なし" Data2(2, 2) = "いちご" -------------------- Dim c, i As Integer For c = 1 To 2 For i = 1 To 2 If Data1(c, i) <> Data2(c, i) Then MessageBox.Show("異なります") GoTo goto1 End If Next Next goto1: ----------------- 言語 VB.NET Data1とData2 の中身が異なればアラートを出す。 (複数異なっていても1度のみアラートを出す) さて これを「GOTO」を使わないでする方法ってあるんでしょうか? 「EXIT Sub」はgoto1:の下にもコードがあるので使えません。 GoTo goto1を Exit For にしても 「i」 のループが抜けるだけです。 これを「C」のループを抜けるようなコードってあるんでしょうか?