Перейти к следующей итерации в петле vba

Я пытаюсь создать простой условный цикл, который перейдет к следующей итерации, если условие истинно. Код, который у меня пока есть:

For i = 2 To 24
    Level = Cells(i, 4)
    Return = Cells(i, 5)

    If Return = 0 And Level = 0 Then
        'Go to the next iteration
    Else
    End If
Next

Я пробовал GoTo NextIteration, но это GoTo NextIteration к ошибке "Метка не определена". Это, вероятно, имеет очень простое решение, но помощь будет высоко ценится. Благодарю.

Ответ 1

For i = 2 To 24
  Level = Cells(i, 4)
  Return = Cells(i, 5)

  If Return = 0 And Level = 0 Then GoTo NextIteration
  'Go to the next iteration
  Else
  End If
  ' This is how you make a line label in VBA - Do not use keyword or
  ' integer and end it in colon
  NextIteration:
Next

Ответ 2

Просто выполните ничего, как только будут выполнены критерии, в противном случае требуемая обработка и цикл For перейдут к следующему элементу.

For i = 2 To 24
    Level = Cells(i, 4)
    Return = Cells(i, 5)

    If Return = 0 And Level = 0 Then
        'Do nothing
    Else
        'Do something
    End If
Next i

Или измените предложение так, чтобы оно обрабатывалось только при выполнении условий:

For i = 2 To 24
    Level = Cells(i, 4)
    Return = Cells(i, 5)

    If Return <> 0 Or Level <> 0 Then
        'Do something
    End If
Next i

Ответ 3

Я использую Goto

  For x= 1 to 20

       If something then goto continue

       skip this code

  Continue:

  Next x

Ответ 4

Настоящее решение создает тот же поток, что и ваш OP. Он не использует метки, но это не было требованием OP. Вы запрашивали только "простой условный цикл, который будет переходить к следующей итерации, если условие истинно", и, поскольку это удобнее для чтения, это, вероятно, лучший вариант, чем при использовании метки.

То, что вы хотите внутри цикла for следует шаблону

If (your condition) Then
    'Do something
End If

В этом случае ваше условие Not(Return = 0 And Level = 0), поэтому вы должны использовать

For i = 2 To 24
    Level = Cells(i, 4)
    Return = Cells(i, 5)

    If (Not(Return = 0 And Level = 0)) Then
        'Do something
    End If
Next i

PS: условие эквивалентно (Return <> 0 Or Level <> 0)

Ответ 5

Самый простой способ - использовать goto. Ниже приведен код с использованием Nexti в качестве метки для перехода

   For i = 2 To 24
        Level = Cells(i, 4)
        Return = Cells(i, 5)

        If Return = 0 And Level = 0 Then
            GoTo Nexti
        Else
        End If
    Nexti:
Next

Ответ 6

For i = 2 To 24
Level = Cells(i, 4)
Return = Cells(i, 5)

If Return = 0 And Level = 0 Then
i = 24
Else
End If

просто переместите его в конец цикла?

Ответ 7

Я обнаружил, что проще всего перейти к следующей итерации из любой точки цикла (аналог оператора Continue в Pascal) - использовать дополнительный однопроходный цикл и оператор Exit For:

'Main loop
For i = 2 To 24
    'Additional single pass loop
    For t = 1 To 1
        Level = Cells(i, 4)
        Return = Cells(i, 5)

        If Return = 0 And Level = 0 Then
            'Go to the next iteration
            Exit For 
        Else
        End If
    Next
Next