Excel VBA - 退出 for 循环

208

当循环内部的条件被满足时,我想退出for循环。如何在if条件被满足时退出for循环?我认为需要在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

15
在循环中,如果满足某个条件,则使用“如果[条件]则退出循环”的语句。 - Dan
4个回答

372
为了提前退出循环,你可以使用 Exit ForIf [condition] Then Exit For 可以用来在满足特定条件时退出循环。

3
@nixda请删除你的评论,因为你分享的超链接指向VB.NET文档,而不是Office VBA文档。VBA的Exit语句比VB.NET的选项少。实际上,VBA只支持以下几种:Exit DoExit ForExit FunctionExit PropertyExit Sub。VBA没有Exit While。正确的链接是:Office VBA参考 - Exit语句 - Excel Hero
@ExcelHero 完成 - nixda

30

退出 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

4
给循环计数器赋值比明确退出循环要不够健壮和未来可靠。如果代码被修改时编辑器没有注意到该计数器还在其他地方使用,前者可能会因循环计数器最大值的更改而出错,同时它也不适用于“For Each”循环。 - jpmc26
3
这只是针对“for”循环(而不是“for each”)的另一种解决方案。赞成和反对适用于不同的解决方案和情况-例如,这比“转到标签”更为强大,后者会破坏逻辑(非结构化编程),或者是VBA中缺失的“继续”关键字的可能解决方法。如果逻辑不能正确清理对象,那么“退出for”语句的优点也可能会受到质疑-尽管在此处不太相关(@jpmc26)。 - paul bica

1
以下第一个答案确实是我认为的最佳实践:
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

0

如果条件(在while循环内部)满足,则跳转到循环外的某个标记


1
这是一个可能的解决方案,但可能不是最佳实践。如果在您的特定情况下没有必要,请避免使用。 - Henrik K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接