#VBA Excel: cicli iterativi

Come eseguire un'istruzione più volte

Autore: Andrea Pacchiarotti
Ultimo aggiornamento: 22 Giugno 2020
Categoria: Microsoft Office Excel VBA

VBA Excel: cicli iterativi
#VBA Excel: cicli iterativi

Cicli iterativi

Per poter eseguire un’istruzione più volte, essa va racchiusa in un ciclo, in tal modo si evita di doverla riscrivere più volte; è anche possibile annidare i cicli.
Come prima differenziazione si ricordi che:

Esistono altri costrutti ciclici come ad esempio While…Wend.
È sempre il programmatore a decidere quale costrutto è più adatto alla risoluzione del problema.

Sommario #VBA Excel: cicli iterativi

For...Next

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

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

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

Per saperne di più su Microsoft Excel potrebbero interessarti i video corsi Excel o questi due 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