Excel VBA - sortie pour la boucle

184

Je voudrais quitter ma forboucle lorsqu'une condition à l'intérieur est remplie. Comment sortir de ma forboucle lorsque la ifcondition est remplie? Je pense à une sorte de sortie à la fin de ma ifdéclaration, mais je ne sais pas comment cela fonctionnerait.

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
PersonnaliséX
la source
13
If [condition] Then Exit Fordans votre boucle
Dan

Réponses:

338

Pour quitter votre boucle tôt, vous pouvez utiliser Exit For

If [condition] Then Exit For

Dan
la source
1
@nixda Veuillez supprimer votre commentaire, car le lien hypertexte que vous avez partagé pointe vers la documentation VB.NET et non vers la documentation Office VBA. La Exitdéclaration de VBA a moins d'options que celle de VB.NET. En fait, VBA ne prend en charge que: Exit Do Exit For Exit Function Exit Propertyet Exit Sub. VBA n'a pas Exit While. Le lien correct est: Référence Office VBA - Instruction de sortie
Excel Hero
@ExcelHero Done
nixda
27

Une autre façon de quitter tôt une boucle For est de changer le compteur de boucle:

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
paul bica
la source
3
Assigner un compteur de boucle est beaucoup moins robuste et à l'épreuve du temps que de quitter explicitement la boucle. Le premier peut être rompu par une modification du maximum du compteur de boucles car le code est modifié si l'éditeur ne remarque pas qu'il est également utilisé ailleurs. Cela ne s'applique pas non plus aux For Eachboucles.
jpmc26
2
C'est simplement une autre solution à la question spécifique à la Forboucle (non For Each). Les avantages et les inconvénients s'appliquent à différentes solutions et à différentes situations - par exemple, il s'agit d'un format plus robuste que celui Go To labelqui freine la logique (programmation non structurée), ou une solution de contournement possible du Continuemot - clé, manquant dans VBA. Les mérites de Exit Forpeuvent également être remis en question si la logique n'effectue pas un nettoyage correct des objets - les mauvaises implémentations ne sont pas tout à fait pertinentes ici cependant (@ jpmc26)
paul bica
0

La première réponse donnée avec ce qui suit est en effet la meilleure pratique de l'OMI:

if i = 0 then exit for

Cependant, c'est aussi une option:

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
ko_00
la source