Перейти к следующей итерации в петле 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