- ベストアンサー
LOOP処理で処理の先頭に移動するには?
数年ぶりにVBのプログラミングをする事になり超初心者状態のため稚拙な質問で申し訳ございません 以下のような感じでLOOP処理を作成しています。 DO UNTIL AAA.EOF チェックA チェックB チェックC AAA.MOVENEXT LOOP 上記のような形で取得した内容をLOOPでまわし、 一レコードづつチェックをかけていくのですが、 たとえば、チェックBでエラーとなった段階で AAA.movenextして チェックcはスキップしLOOPの先頭に移動し 次レコードのチェックをチェックAから開始したいのですが、 このような場合どう記述するのでしょうか? EXIT DOでループ自体から抜けるやり方はありましたが、このように処理の 途中で以降の処理をスキップしてループの先頭に移動する 方法が見つかりませんでした。 どなたかご教授ください!!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
良く訳もわからず、下記をやってみました。 いかがでしょう。思い違いをしてなければ良いが。 合計が10を越えると強制的にエラーにして、resumeを使えるように してみました。 ーーー resumeは Resume Next Resume Resume XXXX の3つがあるようです。 http://www.accessclub.jp/vba/vba_008.htm ーーーー Sub test02() On Error GoTo err_rtn a: i = 0 t = 0 MsgBox "先頭通過" Do Until i > 10 N = InputBox("N=") t = t + N i = i + 1 MsgBox t If t > 10 Then Error 1 End If Loop Exit Sub '--- err_rtn: Resume a End Sub
その他の回答 (2)
- olsen_w
- ベストアンサー率50% (2/4)
単純に以下じゃダメなんですか? ネスト深いけれど。 DO UNTIL AAA.EOF If チェックA =OK then If チェックB = OK Then If チェックC = OK Then ALL OKの場合の処理 End If End If End If AAA.MOVENEXT LOOP
お礼
いろいろ考えたのですが、単純にループ処理の先頭にとばす処理は無いようですので私もこの方法にしました。 ご回答いただきありがとうございました。
Dim isSkip As Boolean AAA.MoveFirst DO UNTIL AAA.EOF IF XXXX Then ・・・・・ End If IF XXXX Then ・・・・・ isSkip = xxxxx IF Not isSkip And XXXX Then ・・・・・ End If End If AAA.MoveNext LOOP という感じで・・・。
お礼
このようなやり方もありますね。参考になりました。有難うございます。
お礼
今回はそれほどネストが深くならなかったためIF文で対応いたしましたが項目が多い場合にはこのような方法をとらないと難しいと思いますので参考になりました。 有難うございました。