2012-03-04 2 views
0

私はいくつかの方法を試しましたが、成功することはできませんでした。私の問題は、ループ1を実行しています。条件が満たされていれば、条件が満たされるまでループ2を実行し、ループ1に戻ります。GoToを使用した後にループに戻る

sub program() 
Dim i As Integer 
Dim q As Integer 

For i=1 to 350 
If Range("A"&i).value=1 And Range("D"&i).Value<15 Then Goto 1 
Next i 

1:q=0 
    Do While List1.Range("A"&i+q).Value<>"" 
    Range("E"&i+q)="K" 
    q=q+1 
    Loop 

End Sub 

私は戻って、「For Nextループ」を「1ループ」を実行した後に戻って、次の私のために継続するか方法を発見していません。多分それは可能ではないかもしれませんし、何とか最初のループの中にコードを含める必要がありますか?ありがとうございます

+0

私はVBAを知らないので完全な回答はできませんが、実装しようとしていることは「状態マシン」です。かなり強力なテクニック。 –

答えて

1

私は実際にVBAを知らない(私は最後のおよそ1996年にVBを使用)が、これは、多かれ少なかれ、右のようになります。後藤の

sub program() 
Dim i As Integer 
Dim q As Integer 

i = 1 
Do while i <= 350 
    If Range("A"&i).value=1 And Range("D"&i).Value<15 Then 
    Do While i <= 350 And List1.Range("A"&i).Value<>"" 
     Range("E"&i)="K" 
     i=i+1 
    Loop 
    Else 
     i=i+1 
    End If 
Loop 
end do 
End Sub 
+1

優れた。 VBAのコードには、ステートメント "end do"(Do Whileはループだけで終了)がありません。ありがとうございました ! –

3

コードにを関数に入れ、gotoを使用する代わりにその関数を呼び出します。関数が終了すると、最初のループは途中から実行を続けます。

+0

私はそれを試みましたが、何らかの理由で正しく動作していなかったので、2番目の答えを使用しました。しかし、将来誰かがこのメソッドを使用する場合は、グローバルとして変数を宣言する必要があります - http://stackoverflow.com/questions/2722146/how-do-i-declare-a-global-variable-in-vba –

0

使用法も、MSDNで推奨されて(あなたがそれを使用する必要があります唯一のエラー処理のために再開)と対になって、しかし、あなたが尋ねたので、これはアプローチです:

Sub program() 
    Dim i As Integer 
    Dim q As Integer 

    For i=1 to 350 
     If ((Range("A"&i).value=1) And (Range("D"&i).Value<15)) Then Goto OtherLoop 
FirstLoop: 
    Next i 

Exit Sub 

OtherLoop: 
    q=0 
    Do While List1.Range("A"&i+q).Value<>"" 
     Range("E"&i+q)="K" 
     q=q+1 
    Loop 
    Goto FirstLoop 

End Sub 

は、あなたが「OtherLoop」それは「FirstLoop」を終了入るから、あなたのコードを維持するために、終了文を必要とし、また、戻ってくるよう伝える必要があるあなたが以前にあった場所に。 もう一度、このようなものを使用しないでください。ループ内のループ(インデント、整理するにはを参照してください)と二次的なプロシージャコール(別のサブまたは関数の呼び出し)が推奨されます。

関連する問題