[vba] VBA-for 루프 반복을 조건부로 건너 뛰는 방법

배열에 대한 for 루프가 있습니다. 내가 원하는 것은 루프의 특정 조건을 테스트하고 true 인 경우 다음 반복으로 건너 뛰는 것입니다.

For i = LBound(Schedule, 1) To UBound(Schedule, 1)
    If (Schedule(i, 1) < ReferenceDate) Then
        PrevCouponIndex = i
        Continue   '*** THIS LINE DOESN'T COMPILE, nor does "Next"
    End If
    DF = Application.Run("SomeFunction"....)
    PV = PV + (DF * Coupon / CouponFrequency)
Next

나는 내가 할 수 있다는 것을 안다.

 If (Schedule(i, 1) < ReferenceDate) Then Continue For

하지만 PrevCouponIndex 변수에 i의 마지막 값을 기록하고 싶습니다.

어떤 아이디어?

감사



답변

이렇게 간단한 걸하면 안 돼요?

For i = LBound(Schedule, 1) To UBound(Schedule, 1)
  If (Schedule(i, 1) < ReferenceDate) Then
     PrevCouponIndex = i
  Else
     DF = Application.Run("SomeFunction"....)
     PV = PV + (DF * Coupon / CouponFrequency)
  End If
Next


답변

VBA에는 Continue다음 루프 반복으로 즉시 점프 할 수있는 다른 키워드 가 없습니다 . Goto특히 이것이 단지 인위적인 예제이고 실제 코드가 더 복잡한 경우 해결 방법으로 의 현명한 사용을 제안합니다 .

For i = LBound(Schedule, 1) To UBound(Schedule, 1)
    If (Schedule(i, 1) < ReferenceDate) Then
        PrevCouponIndex = i
        Goto NextIteration
    End If
    DF = Application.Run("SomeFunction"....)
    PV = PV + (DF * Coupon / CouponFrequency)
    '....'
    'a whole bunch of other code you are not showing us'
    '....'
    NextIteration:
Next

이것이 실제로 모든 코드라면 @Brian이 절대적으로 정확합니다. Else당신의 If진술에 절을 넣고 그것을 끝내십시오.


답변

continue중첩을 사용하여 일종의 사용할 수 있습니다 Do ... Loop While False.

'This sample will output 1 and 3 only

Dim i As Integer

For i = 1 To 3: Do

    If i = 2 Then Exit Do 'Exit Do is the Continue

    Debug.Print i

Loop While False: Next i


답변

Continue For VBA 또는 VB6에서는 유효하지 않습니다.

에서 이 MSDN 페이지 는 VS 2005./Net 2 VB.Net에 도입 된 것으로 보인다.

다른 사람이 사용하는 이외의 옵션 정말이 아니다 말했듯이 Goto나이 Else.


답변

안녕하세요 저는 또한이 문제에 직면하고 있으며 아래 예제 코드를 사용하여 이것을 해결합니다.

For j = 1 To MyTemplte.Sheets.Count

       If MyTemplte.Sheets(j).Visible = 0 Then
           GoTo DoNothing        
       End If 


'process for this for loop
DoNothing:

Next j 


답변

코드를 건너 뛰기 위해 else를 사용하면 결국 모든 것을 끝낼 수 있습니다. 그러면 GoTo를 사용할 수 없게됩니다.

                        If 6 - ((Int_height(Int_Column - 1) - 1) + Int_direction(e, 1)) = 7 Or (Int_Column - 1) + Int_direction(e, 0) = -1 Or (Int_Column - 1) + Int_direction(e, 0) = 7 Then
                Else
                    If Grid((Int_Column - 1) + Int_direction(e, 0), 6 - ((Int_height(Int_Column - 1) - 1) + Int_direction(e, 1))) = "_" Then
                        Console.ReadLine()
                    End If
                End If


답변