Buclele repetă instrucțiunile de mai multe ori și pot economisi mult timp.
Următoarele tipuri de bucle există în Excel VBA:
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.
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.
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
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
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