#VBA Excel: cicli iterativi
Eseguire un'istruzione più volte in VBA Excel
Autore: Andrea Pacchiarotti
Ultimo aggiornamento: 02 Febbraio 2023
Categoria: Microsoft Office Excel VBA cicli iterativi

Cicli iterativi in VBA Excel
I cicli iterativi in VBA (Visual Basic for Application) consentono di eseguire un blocco di codice ripetutamente per un determinato numero di volte o finché una determinata condizione è vera. Ci sono due tipi di cicli iterativi comuni in VBA: il ciclo For...Next e il ciclo Do...Loop, ma esistono anche i cicli While…Wend e For Each...Next.
Per poter eseguire un’istruzione più volte, essa va racchiusa in un ciclo, in tal modo si evita di doverla riscrivere ripetutamente; è anche possibile annidare i cicli.
Come prima differenziazione si ricordi che:
- For...Next (esegue l’istruzione un numero determinato di volte)
- Do...Loop (esegue l’istruzione un numero imprecisato di volte, poiché valuta una condizione e decide se continuare o meno l'esecuzione)
È sempre il programmatore a decidere quale costrutto è più adatto alla risoluzione del problema.
Sommario #VBA Excel: cicli iterativi
- For...Next VBA Excel
- Do...Loop VBA Excel
- Do While...Loop
- Do...Loop While
- While...Wend VBA Excel
- For Each...Next VBA Excel
For...Next VBA Excel
For variabilecontatore = valore_iniziale To valore_finale Step passo_numerico
Istruzioni
Next variabilecontatore
La prima riga rappresenta la condizione.
La variabilecontatore per default s’incrementa 1 volta ogni ciclo (passo_numerico è quindi 1 e può essere omesso), ma è possibile usare valori diversi, anche negativi e decimali (usando il punto e non la virgola), in tal caso si farà ad esempio For 10 To 1.
Next indica la fine del ciclo e permette l’incremento fino al numero finale, ovvero esegue le istruzioni tante volte quante dichiarate nel For.
variabilecontatore dopo il Next non è necessaria, anche se è preferibile metterla se si usano cicli For annidati.
Exit For, Exit Do, Exit Sub ed Exit Function escono dai rispettivi cicli For e Do, da una Sub e da una Function.
Se si commette un errore nel codice e si entra in loop è possibile uscirne con Ctrl+Pausa oppure Ctrl+Break o, in alternativa, Esc+Fine.
Esempio - Portare 10 volte a video Ciao contando i cicli:
Sub Ciclo()
Dim i As Byte
For i = 1 To 10
MsgBox "Ciao n. " & i
Next i
End Sub
Oppure usando i decimali:
Sub Ciclo()
Dim i As Single
For i = 1 To 2 Step 0.1
MsgBox "Ciao n. " & i
Next i
End Sub
Esempio - Scrivere i quadrati dei primi dieci numeri interi nella colonna E a partire dalla riga 1
Sub Ciclo()
Dim i As Byte
For i = 1 To 10
Cells(i, 5) = i ^ 2
Next i
End Sub
Esercizi
Esercizio su MsgBox, InputBox in una variabile, ciclo For e condizione If
Immettere una password per max 3 volte, se la password è il proprio nome, far apparire il messaggio Ok (in un caso pratico, anziché far apparire una finestra, si potrebbe far caricare ad esempio una UserForm, aprire un file, entrare in un’area riservata, ecc.).
Prevedere l’uscita forzata se si immette subito la password corretta (altrimenti il ciclo continuerebbe comunque per 3 volte).
Sub Ciclo()
Dim pass As String
Dim i As Byte
For i = 1 To 3
pass = InputBox("Inserisci password: ")
If pass = "Alex" Then
MsgBox "Ok"
Exit Sub
End If
Next i
End Sub
Do...Loop VBA Excel
Esistono più costrutti con il Do…Loop e sono fatti con While, qui se ne mostrano due.
Do While…Loop
Il Do While...Loop esegue l’istruzione solo se la condizione è vera
Do While condizione
istruzioni
Loop
Esempio - Mostrare a video una frase:
solo se l’utente risponde Sì (cioè la condizione è Sì) alla domanda “Mostrare a video?”.
Usare Exit Sub per uscire dopo aver risposto Sì; altrimenti il ciclo continua.
Sub Ciclo()
Do While MsgBox("Mostri a video?",vbYesNo)=vbYes
MsgBox "Ciao, come stai?"
Exit Sub
Loop
End Sub
Do…Loop While
Il Do…Loop While esegue l’istruzione almeno una volta, poi controlla se la condizione è vera e, se lo è, riesegue l’istruzione.
Do
istruzioni
Loop While condizione
Esempio - Mostrare a video una frase:
almeno una volta a prescindere dalla condizione
Sub Ciclo()
Do
MsgBox "Ciao, come stai?"
Loop While MsgBox(“Mostri a video?",vbYesNo)=vbYes
End Sub
While...Wend VBA Excel
Ripete un'azione finché una condizione è vera, dunque è simile al Do While…Loop
While condizione
istruzione
Wend
Sub Ciclo()
While MsgBox("Mostri a video?",vbYesNo)=vbYes
MsgBox "Ciao, come stai?"
Exit Sub
Wend
MsgBox "While…Wend terminato"
End Sub
For Each...Next VBA Excel
Il ciclo For Each...Next consente di eseguire un blocco di codice per ogni elemento in una raccolta, come una serie di oggetti in una cartella. Ad esempio, potresti usare questo tipo di ciclo per eseguire una serie di istruzioni per ogni file in una cartella specifica.
For Each obj In Collection
'codice da eseguire
Next obj
In generale, i cicli iterativi sono uno strumento molto utile per automatizzare compiti ripetitivi e sono molto comuni nei programmi scritti in VBA, ma anche in tutti gli altri linguaggi di programmazione. Mi auguro sia stato utile leggere VBA Excel: cicli iterativi!