TOP

VBA-Lecția 8.1. Bucle (Loops)

Buclele repetă instrucțiunile de mai multe ori și pot economisi mult timp.

Următoarele tipuri de bucle există în Excel VBA:

  • While ... Wend
  • Do ... Loop
  • For ... To ... Next

  • Următorul cod inserează o secvență de numere în fiecare celulă a coloanei A (de la 1 la 12):

    Sub while_loop()
    
        Cells(1, 1) = 1
        Cells(2, 1) = 2
        Cells(3, 1) = 3
        Cells(4, 1) = 4
        Cells(5, 1) = 5
        Cells(6, 1) = 6
        Cells(7, 1) = 7
        Cells(8, 1) = 8
        Cells(9, 1) = 9
        Cells(10, 1) = 10
        Cells(11, 1) = 11
        Cells(12, 1) = 12
    
    End Sub
    

    Acest cod este foarte repetitiv...

    Imaginați-vă dacă ar trebui să inserăm numere consecutive în sute de celule în loc de doar 12... Acum înțelegeți de ce buclele sunt foarte utile.

    WHILE ... WEND

    Să dăm un exemplu de ciclu gol While:

    Sub while_loop()
    
        While [condiție]
            'Instrucțiuni
        Wend
    
    End Sub
    

    Atâta timp cât condiția este adevărată, instrucțiunile din buclă vor continua să se execute (dar aveți grijă să nu creați o buclă infinită).

    Mai jos este macrocomanda de buclă care a fost discutată mai devreme, transformată într-o buclă While:

    Sub while_loop()
    
        Dim num As Integer
        num = 1 'Numărul de pornire (în acest caz, este numărul liniei și valoarea setate la)
    
        While num <= 12 'Atâta timp cât variabila num este mai mică sau egală cu 12, instrucțiunile vor fi executate
           Cells(num, 1) = num 'Numerotare
           num = num + 1 'Numărul este incrementat cu 1 de fiecare dată când trece bucla
        Wend
           
    End Sub
    

    Folosind această buclă într-o macrocomandă, tot ce ar trebui să facem dacă am avea nevoie de 400 de benzi în loc de 12 este să înlocuim 12 cu 400.

    DO ... LOOP

    Există o altă modalitate de a scrie o buclă care funcționează la fel ca While Wend (care rulează atâta timp cât o anumită condiție conținută în comanda While este adevărată):

    Sub do_while_loop()
    
        Do While [condiție]
            'Instrucțiuni
        Loop
    
    End Sub
    

    Următoarea versiune arată că condiția poate fi scrisă la sfârșitul buclei Do Loop, ceea ce înseamnă că instrucțiunile vor fi executate exact cel puțin o dată:

    Sub do_while_loop()
    
        Do
            'Instrucțiuni
        Loop While [condiție]
    
    End Sub
    

    În loc să facem buclă în timp ce condiția este îndeplinită, putem, de asemenea, să ieșim din buclă după condiție dacă înlocuim While cu Until:

    Sub do_while_loop()
    
        Do Until [condiție]
            'Instrucțiuni
        Loop
    
    End Sub
    

    FOR ... TO ... NEXT

    Sub for_loop()
    
        For i = 1 To 5
            'Instrucțiuni
        Next
    
    End Sub
    

    Bucla For se va repeta aici de 5 ori.

    De fiecare dată când acest ciclu este repetat, variabila i este mărită automat cu 1:

    Sub for_loop()
    
        For i = 1 To 5
            MsgBox i
        Next
    
    End Sub
    

    Ieșire timpurie din buclă (Exit)

    Este posibil să părăsiți mai devreme bucla For folosind următoarea instrucțiune:

    Exit For 'Ieșiți din bucla For
    

    Să luăm în considerare un exemplu care va arăta clar acest lucru:

    Sub for_loop()
        Dim max_loops As Integer
        max_loops = Range("A1") 'În celula A1, am specificat limita pentru numărul de repetări
    
        For i = 1 To 7 'Numărul de cicluri estimat: 7
           If i > max_loops Then 'Dacă celula A1 este goală sau conține un număr mai mic de 7, atunci reduceți numărul de repetări
               Exit For 'Dacă condiția anterioară este TRUE, atunci ieșirea din bucla For...bucla
           End If
       
           MsgBox i
        Next
    
    End Sub
    

    Alți operatori Exit:

    Exit Do 'Ieșire buclă Do Loop
    
    Exit Sub 'Ieșiți din procedură
    
    Exit Function 'Funcția de ieșire