Excel VBA-루프 종료


181

for내부 조건이 충족되면 루프 를 종료하고 싶습니다 . 조건이 충족 for되면 루프를 어떻게 종료 할 수 if있습니까? if진술서 끝에 어떤 종류의 출구가 있다고 생각 하지만 그것이 어떻게 작동하는지 모르겠습니다.

Dim i As Long
For i = 1 To 50
    Range("B" & i).Select
    If Range("B" & i).Value = "Artikel" Then
        Dim temp As Long
        temp = i
    End If
Next i
Range("A1:Z" & temp - 1).EntireRow.Delete Shift:=xlToLeft

13
If [condition] Then Exit For내부
Dan

답변:


333

루프를 일찍 종료하려면 다음을 사용할 수 있습니다. Exit For

If [condition] Then Exit For


@nixda 공유 한 하이퍼 링크가 Office VBA 설명서가 아니라 VB.NET 설명서를 가리 키므로 의견을 제거하십시오. VBA의 Exit진술에는 VB.NET보다 적은 옵션이 있습니다. 사실, VBA 만 지원 Exit Do Exit For Exit Function Exit Property하고 Exit Sub. VBA는 없습니다 Exit While. 올바른 링크는 다음과 같습니다. Office VBA Reference -Exit statement
Excel Hero

@ExcelHero Done
nixda

27

For 루프를 일찍 종료하는 또 다른 방법은 루프 카운터를 변경하는 것입니다.

For i = 1 To 10
    If i = 5 Then i = 10
Next i

Debug.Print i   '11

For i = 1 To 10
    If i = 5 Then Exit For
Next i

Debug.Print i   '5

3
루프 카운터를 지정하는 것은 루프를 명시 적으로 종료하는 것보다 훨씬 덜 강력하고 미래의 증거입니다. 편집기는 코드가 다른 곳에서도 사용되고 있음을 인식하지 못하면 코드가 수정되므로 루프 카운터의 최대 값을 변경하면 전자가 깨질 수 있습니다. For Each루프 에는 적용되지 않습니다 .
jpmc26

2
이것은 단순히 For루프 (not For Each)에 관한 질문에 대한 또 다른 해결책 입니다. 장점과 단점은 다양한 솔루션과 상황에 적용됩니다. 예를 들어 Go To label논리를 제동하는 것 (구조화되지 않은 프로그래밍) 또는 ContinueVBA에서 누락 된 키워드 의 가능한 해결 방법 보다 더 강력한 형식 입니다. Exit For논리가 객체의 적절한 정리를 수행하지 않으면 장점 도 의문의 여지가 있습니다. 나쁜 구현은 여기서는 관련이 없습니다 (@ jpmc26)
paul bica

0

다음과 같은 첫 번째 대답은 실제로 imo 모범 사례입니다.

if i = 0 then exit for

그러나 이것은 또한 옵션입니다.

Sub some()

Count = 0
End_ = ThisWorkbook.Sheets(1).Range("B1047854").End(xlUp).Row

While Count < End_ And Not ThisWorkbook.Sheets(1).Range("B" & Count).Value = "Artikel"
    Count = Count + 1
    If ThisWorkbook.Sheets(1).Range("B" & Count).Value = "Artikel" Then
        ThisWorkbook.Sheets(1).Range("A1:Z" & Count - 1).EntireRow.Delete Shift:=xlToLeft
    End If
Wend

End Sub
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.