I cicli ripetono le istruzioni più volte e possono far risparmiare molto tempo.
In Excel VBA esistono i seguenti tipi di loop:
Il codice seguente inserisce una sequenza di numeri in ciascuna cella della colonna A (da 1 a 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
Questo codice è molto ripetitivo...
Immagina se dovessimo inserire numeri consecutivi in centinaia di celle invece che solo in 12... Ora capisci perché i cicli sono molto utili.
Facciamo un esempio di ciclo vuoto While:
Sub while_loop()
While [condizione]
'Istruzioni
Wend
End Sub
Finché la condizione è vera, le istruzioni nel ciclo continueranno ad essere eseguite (ma fai attenzione a non creare un ciclo infinito).
Di seguito è riportata la macro di loop discussa in precedenza, trasformata in un loop While:
Sub while_loop()
Dim num As Integer
num = 1 'Il numero iniziale (in questo caso è il numero di riga e il valore impostato su)
While num <= 12 'Finché la variabile num è inferiore o uguale a 12, le istruzioni verranno eseguite
Cells(num, 1) = num 'Numerazione
num = num + 1 'Il numero viene incrementato di 1 ogni volta che passa il ciclo
Wend
End Sub
Utilizzando questo ciclo in una macro, tutto ciò che dovremmo fare se avessimo bisogno di 400 nastri invece di 12 sarebbe sostituire 12 con 400.
Esiste un altro modo per scrivere un ciclo che funzioni allo stesso modo di While Wend (in esecuzione finché una determinata condizione contenuta nel comando While è vera):
Sub do_while_loop()
Do While [condizione]
'Istruzioni
Loop
End Sub
La versione seguente mostra che la condizione può essere scritta alla fine del ciclo Do Loop, il che significa che le istruzioni verranno eseguite esattamente almeno una volta:
Sub do_while_loop()
Do
'Istruzioni
Loop While [condizione]
End Sub
Invece di eseguire il ciclo mentre la condizione è soddisfatta, possiamo anche uscire dal ciclo in base alla condizione se sostituiamo While con Until:
Sub do_while_loop()
Do Until [condizione]
'Istruzioni
Loop
End Sub
Sub for_loop()
For i = 1 To 5
'Istruzioni
Next
End Sub
Il ciclo For verrà ripetuto qui 5 volte.
Ogni volta che questo ciclo viene ripetuto, la variabile i viene automaticamente incrementata di 1:
Sub for_loop()
For i = 1 To 5
MsgBox i
Next
End Sub
È possibile uscire anticipatamente dal ciclo For utilizzando la seguente istruzione:
Exit For 'Esci dal ciclo For
Consideriamo un esempio che lo mostrerà chiaramente:
Sub for_loop()
Dim max_loops As Integer
max_loops = Range("A1") 'Nella cella A1 abbiamo specificato il limite per il numero di ripetizioni
For i = 1 To 7 'Numero di cicli previsto: 7
If i > max_loops Then 'Se la cella A1 è vuota o contiene un numero inferiore a 7, riduci il numero di ripetizioni
Exit For 'Se la condizione precedente è TRUE, allora l'uscita dal ciclo For...loop
End If
MsgBox i
Next
End Sub
Altri operatori Exit:
Exit Do 'Uscita dal ciclo Do Loop
Exit Sub 'Uscire dalla procedura
Exit Function 'Funzione di uscita