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