Forループの制御について

このQ&Aのポイント
  • Forループの制御についてVB 2005、Framework2.0を使用しています。For文を使ったループについてお尋ねしたいことがあります。
  • Forループの制御について質問があります。ループ変数が特定の条件に一致した場合、次のループから処理を再開したいです。
  • Forループの制御についてお尋ねしたいことがあります。ループ変数が特定の条件に一致した場合、次のループから処理を再開する方法を教えてください。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • soaikats
  • ベストアンサー率58% (14/24)
回答No.3

0から10のループは11回で、 1回分とばしたら10回でOKという ツッコミは置いといて。 質問のような制御を行うためには Ifの条件を次のように変えてみてください。  If(TEST(i)<>1)Then

heaven123
質問者

お礼

無事に思い通りの結果になりました。 こんな条件の指定方法があった事に気がつきませんでした・・・。 そういえば0から10のループは11回になりますね^^;

その他の回答 (2)

回答No.2

2005から?Continue ステートメントが使えるようになっています Forループの中ならContinue Forを記述することで以下の処理を 無視して即Forステートメントへ移動します。 For i As Integer = 0 To 10 If i = 6 Then Continue For End If next

heaven123
質問者

お礼

ありがとうございます。 Continue Forではその周は飛ばす事が出来ましたが、次の周を飛ばすことはできませんでした。 途中でFor i = 0 to 10 Step2とかに変更できる様な関数があれば便利だなと思いましたがないですよね・・

  • tochansa
  • ベストアンサー率76% (23/30)
回答No.1

for i as integer = 0 to 10 if i <> 6 '// iが6じゃなければ処理を行う。 end if next こういうのじゃだめなんですか?

関連するQ&A

  • ループ中にフォームを閉じると、様々な例外が出てしまう・・

    お世話になっております。 VB2005を勉強しております。現在、フォームが一枚だけのシンプルなプログラムを作っています。For~Nextのループ内にApplication.DoEvents()と記述して他の操作を受けられるようにしておりますが、その状態でループ中にフォームを閉じると例外が出てしまいます。それにフォームは消えまても、デバッグ中断ボタンを押すまでプログラム自体はは起動したままです。強制定期にループを破棄する方法をご教授ください。または、ループ中でも正常にプログラムを閉じる方法でも結構です。 ループ内の処理によってエラー内容は違いますが、現在はAccess.Violation.Exceptionという例外がでます。下記のように、なんの処理もしないループを作ってみましたが、やはりこれでも違う例外が出ました。 ・その1 For i As Integer = 0 To 1000000000   Application.DoEvents() Next ・その2 For i As Integer = 0 To 1000000000   Application.DoEvents()   System.Threading.Thread.Sleep(100) Next ちなみに、フォームのClosingイベントでフラグを立てて、 For i As Integer = 0 To maxInt   If flag_closing = True Then     Exit For   End If   Application.DoEvents() Next などとやってみましたが効果がありませんでした。 よろしくお願いいたします。

  • VBAでForループを抜けるためには?

    i = 1 To 1000 Step 1 Next というForループを作って、 ある条件A < 0 に達すると、その時点でiが1000に達していなくても Forループを終了したい場合、どのように記述すれば良いでしょうか?

  • カウンタの値が変動するループ。

    ループの中で条件によってカウンタの元となる配列の項目を削除したいと 思っています。 具体的には list As List(Of string) For i As Integer = 0 To list.Count - 1 '条件によって、Listの項目を削除 If 条件 list.RemoveAt(i) End If Next 以上のようにすると、Listの項目が減っていくわけですが、iの値は 考慮していないので、いつかエラーが発生します。 カウンタの元となる値が変動した場合、再度その変動した値で最初から ループしなおすようにできないものでしょうか? (For以外のループを使えばいけるのかな…?) アドバイス宜しくお願いします。

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

    初歩的な質問で申し訳ありません・・・ ループで処理しているものがあるのですが、ExitForでループを抜けることはできますが、途中で処理を中断して次のカウンタの処理へ移ることはできるのでしょうか? 例えば For i = 1 to 10   if 関数1() = False then     ■ループ処理を終了するのではなく次のカウンタ[i]に移りたい■   else     Call 関数2()   end if Next i という事をしたいと思っています。 今は For i = 1 to 10   ret = 関数1()   if ret = True then     Call 関数2()   end if Next i という方法で記述していますが、上記のような条件文が10や20もあると、IF文の入れ子入れ子でかなりコードが見にくいです・・・。 どなたかよろしくお願いします!

  • For ~ Next の使い方

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

  • OptionButton1~40真偽の分岐をループでまわす

    オプションボタンをループで回したいのですがエラーになってしまいます。 環境はExcel2000とExcel2002のVBAです。 --------------------------------------- Dim i as integer Dim a as integer for i = 1 To 40 if OptionButton & i & .value Then a = i - 1 End if Next ---------------------------------------- といった感じにしたいのですが、上記の場合エラーになってしまいます。 Else ifでひとつひとつ書いていくのもコードが長くなって避けたいです… あとオプションボタンが40個というのはユーザインターフェースとして 使いにくいというのはここではおいといてください… OptionButtonや.valueを"でくくったりしてみましたが それもエラーになります。 OptionButtonみたいな複数のオブジェクトを ループでまわすのは不可能なのでしょうか? もし可能であれば何かうまい方法を教えて頂けないでしょうか? よろしくお願い致します。

  • For文の終了値を関数にしても問題ないですか

    VB6です。 For文の終了値が関数になっている場合、この関数の評価はFor文を実行する最初に1回しか行われない(関数は1度しか呼ばれない)ということがVBの規約か何かどこかで明記されているでしょうか。 例) For i = 0 To Func(i) (処理) Next Function Func(i as integer) as integer Func = i + 1 End Function という風に記述した場合、(処理)が2回実行されるてループを抜けることが確認できました。これはi=0のときに関数Funcを一回だけ実行しているということです。(デバッグモードでそれを確認) これは、規定の動作なのかそれともたまたまなのでしょうか。 上記のFor文でもし毎回Funcが評価されると無限ループになってしまいます。

  • [VBA] for文の3次元ループ

    for文の3次元ループがうまく働いてくれません。 8通り(2x2x2)の組み合わせ表示を期待しましたが2通り(y1のみ)のみでループが終わってしまいます。エラーなどはでません。何が原因なのか分かりません。ご指導お願いします。 Public x1 As Single, y1 As Single, z1 As Single Sub Start1() i=1 For x1 = 0.3 To 0.4 Step 0.1 For y1 = 0.5 To 0.6 Step 0.1 For z1 = 0.4 To 0.5 Step 0.1 Cells(i, 1) = x1 Cells(i, 2) = y1 Cells(i, 3) = z1 i=i+1 Next z1 Next y1 Next x1 End Sub

  • 複数のオブジェクトをループで処理したい場合

    以下のような処理をしたい場合 Dim objData1 As Object Dim objData2 As Object Dim objData3 As Object Dim objData4 As Object Dim i As Integer For i=0 to 4 ここでオブジェクトの1~4を順番に処理 Next 変数iをobjData[i]の様にしたいのですが どのようにすればいいのでしょうか?

  • VBAでループ内で使う変数名を可変にできないか。

    次のような処理で・・・、  Cnt_1 = Cnt_1 + 1  Cnt_2 = Cnt_2 + 1    : 実際には一つの変数(Cnt_1など)ごとに処理がもっとあるのですが、 変数はCnt_1からCnt_5まであり、すべて同じ処理をするので、変数名を 可変にして同じループで書けないかと思うのですが、可能でしょうか? たとえば、 For I=1 to 5  Cnt_I = Cnt_I + 1 Next I と書くと、「Cnt_I」という変数の処理になってしまいますね・・。 なにかいい方法はないでしょうか?

専門家に質問してみよう