#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

Iscriviti gratuitamente al mio canale YouTube su Excel!
Ti serve un corso Excel? Cliccami ora!

VBA Excel: cicli iterativi
#VBA Excel: 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:

È sempre il programmatore a decidere quale costrutto è più adatto alla risoluzione del problema.

Sommario #VBA Excel: cicli iterativi

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!

Per saperne di più su Microsoft Excel potrebbero interessarti i video corsi Excel o questi libri:


Se vuoi approfondire alcuni dei temi trattati, visita la pagina con le mie pubblicazioni cartacee e online

Se l'articolo ti è piaciuto, condividilo!

Segui l'hashtag #AndreaPacchiarotti