TOP

VBA-Lezione 8.1. Cicli (Loops)

I cicli ripetono le istruzioni più volte e possono far risparmiare molto tempo.

In Excel VBA esistono i seguenti tipi di loop:

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

  • 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.

    WHILE ... WEND

    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.

    DO ... LOOP

    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
    

    FOR ... TO ... NEXT

    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
    

    Uscita anticipata dal ciclo (Exit)

    È 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