Il ciclo For...Next

 

Se una azione o una qualsiasi elaborazione deve essere ripetuta più di una volta è cosa saggia affidarsi ai cicli che il VBA ci mette a disposizione.

Il ciclo For ... Next serve per eseguire un blocco di istruzioni in modo ripetitivo.

La sintassi è:

For Contatore Inizio To Fine [Step incremento]

seguono le istruzioni da ripetere

Next [Contatore]

 

"Inizio ", "Fine " e "incremento" possono essere rappresentati sia da valori numerici che da variabili numeriche.

Se incremento è 1 Step può essere omesso ed il Contatore viene incrementato di una unità ad ogni ciclo.

Ma incremento può essere anche un numero diverso da 1, ossia un qualsiasi numero, intero o decimale, positivo o negativo. In questo caso il Contatore viene incrementato o decrementato del valore indicato dallo Step ad ogni ciclo.

"[Contatore]" associato alla istruzione "Next" può essere tranquillamente omesso.

 

Tutte le istruzioni comprese in un blocco For ... Next vengono ripetute tante volte fino a quando il Contatore raggiunge il valore indicato dal limite Fine.

Quando viene incontrata l'istruzione Next al contatore viene sommato o sottratto l'incremento indicato dallo Step e viene controllato se il contatore ha superato il valore finale.

Se il valore finale non è stato superato l'esecuzione delle istruzioni riprende dalla prima istruzione che si trova subito dopo il For

Se il valore finale è stato superato l'esecuzione delle istruzioni continua con la prima istruzione che si trova dopo l'istruzione Next

 

Nel blocco del ciclo il contatore non deve essere modificato, pena un non corretto funzionamento del ciclo.

Es:

Abbiamo questo ciclo:

For Contatore = 1 To 10
MsgBox "il contatore vale " & Contatore
Next

Scritto in questo modo il messaggio ci viene mostrato 10 volte mostrandoci ogni volta il valore che la variabile Contatore ha assunto ad ogni ciclo

Se nel ciclo usiamo la variabile usata dal contatore e le assegnamo un altro valore potremmo ottenere come risultato che il ciclo entri in ul loop infinito come in questo caso:

For Contatore = 1 To 10
MsgBox "il contatore vale " & Contatore
Contatore = 3
Next

Il contatore rimarrà congelato a 4 per via della istruzione: Contatore = 3

Diversamente è se usiamo la variabile del contatore in modo oculato come in quest'altro esempio:

For Contatore = 1 To 10
MsgBox "il contatore vale " & Contatore
If Contatore = 3 Then Contatore = 6
Next

In questo modo facciamo sì che quando il contatore assume il valore di 3 passi subito a 6 saltando i valori 4 e 5.

 

All'uscita dal ciclo il contatore ha il valore superiore al valore finale dipendente dallo Step.

Più cicli possono essere nidificati ma non possono accavallarsi tra loro. L'ultimo ciclo aperto deve essere chiuso per primo.

For Contatore = 1 To 10
MsgBox "il contatore esterno vale " & Contatore
For Contatore2 = 1 To 5
MsgBox "il contatore interno vale " & Contatore2
If Contatore = 3 Then Contatore = 6
Next Contatore2
Next Contatore

All'interno di un ciclo possono essere aperti e chiusi più cicli.

For Contatore = 1 To 10
For Contatore2 = 1 To 5
MsgBox "il contatore vale " & Contatore
Next Contatore2
MsgBox "qui si possino fare altre cose"
For Contatore3 = 1 To 5
MsgBox "il contatore vale " & Contatore
Next Contatore3
Next Contatore

Leggendo molti dei lavori mandatimi in visione mi si rizzano i capelli nel vedere ciò che avviene (è stato scritto) in un blocco For ... Next.

Per questo motivo mi son deciso di fare questa pausa anche perchè nelle trattazioni che andremo a fare in seguito si fa un intenso uso dei cicli For ... Next.

 

Nella speranza di rendere l'argomento più comprensibile ho cercato di dividerlo in più paragrafi:

  1. Sintassi per la creazione di un ciclo
  2. Istruzione di un ciclo
  3. Il contatore
  4. L'istruzione Step
  5. L'istruzione Next
  6. Uscita dal ciclo
  7. Le istruzioni da scrivere in un corpo For ... Next
  8. Utilizzo e manipolazione del contatore
  9. Che cosa è vietato in un blocco For ... Next
  10. Che cosa è sconsigliato in un blocco For ... Next
  11. Chiusura forzata dei cicli

 

Sintassi per la creazione di un ciclo

Questa è la sintassi e la forma da usare:

For Contatore Inizio To Fine [Step incremento]

.... blocco istruzioni da eseguirsi all'interno del ciclo

Next [Contatore]

Il costrutto di questo ciclo è troppo teorico o non è abbastanza chiaro? Vediamo un esempio pratico.

primo caso: costruzione di un ciclo in senso ascendente

riempimento di una matrice con numeri casuali:

Sub riempimentoMatrice()
Dim MiaMatrice(1 To 10)
Dim I, A
Randomize (Timer)
For I = 1 To 10 Step 1
A = Int(Rnd() * 100) + 1
MiaMatrice(I) = A
Next I
End Sub

lettura di una matrice in senso ascendente:

Sub letturaMatrice()
Dim MiaMatrice(1 To 10)
Dim I, A
Randomize Timer
For I = 1 To 10 Step 1
A = MiaMatrice(I)
Next I
End Sub

lettura di un ciclo in senso discendente:

Sub letturaMatrice2()
Dim MiaMatrice(1 To 10)
Dim I, A
Randomize Timer
For I = 10 To 1 Step -1
A = MiaMatrice(I)
Next I
End Sub

Ovviamente nessuno ci vieta di leggere le due matrici viste sopra nel senso inverso da come sono state create. Basta sapere che in questi casi la lettura avviene in senso inverso: ciò che è stato inserito prima verrà letto alla fine e ciò che è stato inserito alla fine verrà letto prima.

 

torna all'indice

 

Istruzione di un ciclo

Per istruire un ciclo occorre avere le idee chiare e bisogna anche sapere quel che si vuol fare nel ciclo (penso che questo non è un problema per molti di noi) la sintassi. E così:

vogliamo creare un ciclo che conti da 2 a 15 procedendo di una unità alla volta?
allora scriviamo "For I = 2 To 15 Step 1" (in realtà in questo caso lo Step 1 è superfluo, ma questo lo vedremo in seguito)

vogliamo creare un ciclo che conti da 1 a 6 procedendo con un passo decimale (1 decimo alla volta)?
scriviamo "For I = 1 To 6 Step 0,1"

vogliamo creare un ciclo che conti da 10 a 1?
scriviamo "For I = 10 To 1 Step -1"

Al posto dei valori numerici è possibile usare anche variabili come nei seguenti casi:

A = 5: B = 0,5
"For I = 1 To A Step B"
A = 3: B = 50
"For I = A To B Step 2"

 

torna all'indice

 

Il contatore

Il contatore del ciclo è una variabile di tipo numerico e varia il suo valore ogni volta si incontra l'istruzione "Next".

All'uscita dal ciclo il contatore avrà un valore superiore a quello indicato dall'indice maggiore dipendente dallo Step usato. Ma questo lo vedremo più avanti nel paragrafo "Uscita dal ciclo".

Ma attenzione. Se nel corpo del ciclo dobbiamo usare delle variabili dobbiamo evitare assolutamente che tale variabile abbia lo stesso nome del contatore usato nel ciclo in quanto questo fatto cambierebbe l'andamento del ciclo. In certi casi porterebbe anche ad un loop infinito.

Tuttavia a volte possiamo avere la necessità di farlo. Nel caso che andiamo a manipolare intenzionalmente questo contatore dobbiamo prestare molta attenzione nel compiere tale operazione.

In ogni caso non è mai consentito assegnare al contatore, nel corpo di un ciclo, un valore stringa. Il contatore del ciclo deve sempre essere di tipo numerico anche se è lecito dichiararlo, nella zona delle dichiarazioni, come variabile.

Modo errato di manipolare il contatore

Questo è un esempio di ciclo che provoca un loop infinito (quindi da evitare):

 

For I = 1 To 10
I = 1
Next

Con questo si istruisce un ciclo che dovrebbe contare da 1 a 10

tuttavia nel suo corpo abbiamo inserito la istruzione che usa una variabile che ha lo stesso nome del contatore del ciclo. Ogni volta che questa istruzione viene incontrata il valore del contatore viene riportato ad 1

quando si passa alla istruzione "Next" tale variabile viene incrementata e passa a 2

ma quando si va a rileggere l'istruzione "I = 1" torna a riassumere il valore 1

in questa maniera il ciclo non finisce mai.

Questo è un esempio di ciclo che provoca un errore ed il conseguente blocco:

For I = 1 To 10
I = "Casa"
Next

Qualsiasi commento è inutile.

Manipolazione voluta del contatore

In questo ciclo interveniamo affinché non segua il suo percorso normale. Solo quando in contatore ha il valore uguale a 3 gli viene assegnato il nuovo valore che, in ogni caso, deve essere sempre superiore al suo valore attuale. In caso contrario anche in questo caso corriamo ril rischi di entrare in un loop infinito.

For I = 1 To 10
If I = 3 Then I = 7
Next

in questo facciamo in modo che quando il contatore arriva ad avere il valore uguale a 3 passi direttamente a 7 evitando di assumere i valori 4,5 e 6

 

torna all'indice

 

L'istruzione Step

è facoltativa nel caso di un ciclo che viaggia in senso ascendente e, se omesso, l'incremento è unitario; se l'incremento deve essere diverso da 1 sarà necessario indicare lo Step

è sempre obbligatoria nel caso di un ciclo che viaggia in senso discendente per indicare il decremento da effettuare durante il ciclo

Es di ciclo Ascendente Es di ciclo Discendente Es di ciclo con Step dec.
For I = 1 To 10
.........
Next
For I = 10 To 1 Step -1
................
Next
For I = 1 To 4 Step 0,1
..................
Next

 

in questi esempi i valori del contatore "I" saranno rispettivamente:

Primo ciclo 1 2 3 4 5 6 7 8 9 10
Secondo ciclo 10 9 8 7 6 5 4 3 2 1
Terzo ciclo 1 1,1 1,2 1,3 1,4 1,5 1,6 1,7 1,8 ecc

 

Modificando lo Step si modificherà di conseguenza la sequenza dei valori attribuiti al contatore:

Step 2 Ascendente

1 3 5 7 9

Step -2 Discendente 10 8 6 4 2
Step 0,1 Decimale 1 1,1 1,2 1,3 ecc

 

torna all'indice

 

L'istrizione Next

In un normale ciclo l'istruzione Next indica la fine del blocco ed incrementa il contatore. Quando il contatore ha raggiunto il limite massimo indicato nella istruzione For consente l'uscita dal ciclo ed il Contatore ha un valore immediatamente superiore al limite massimo indicato in For

I cicli possono essere anche nidificati, ossia in un ciclo For ... Next è possibile nidificare tanti altri cicli.

In cicli nidificati le varie istruzioni Next vanno collocati in senso inverso di come sono state collocate le istruzioni For:

la prima istruzione Next chiude l'ultimo For

l'ultima istruzione Next chiude il primo For

Vediamo alcuni esempi:

1° esempio 2° esempio 3° esempio 4° esempio
un normale ciclo un ciclo nidificato altro ciclo nidificato  
For I = 1 To 10
..............
Next I
For Contatore = 1 To 10
For Contatore2 = 1 To 5
...........
Next Contatore2
Next Contatore
For Contatore = 1 To 10
For Contatore2 = 1 To 5
For Contatore3 = 1 To 8
..........
Next Contatore3
Next Contatore2
Next Contatore
For Contatore = 1 To 10
For Contatore2 = 1 To 5
...........
Next Contatore2
For Contatore2 = 1 To 8
...........
Next Contatore2
For Contatore3 = 1 To 3
...........
Next Contatore3
Next Contatore

Nel primo esempio:

le istruzioni contenute nel ciclo vengono ripetute 10 volte

Nel secondo esempio:

  1. parte il primo ciclo, quello più esterno
  2. subito dopo parte anche il secondo ciclo, quello interno
  3. questo secondo ciclo esegue 5 volte le istruzioni contenute al suo interno
  4. quando il ciclo interno finisce si va ad incrementare quello esterno
  5. nel successivo giro del ciclo esterno si va ad eseguire nuovamente il ciclo interno
  6. questo fino a quando il contatore del ciclo esterno raggiunge il limite massimo imposto nella istruzione For

Nel terzo esempio:

  1. parte il primo ciclo, quello esterno
  2. si incontra il secondo ciclo che parte a sua volta
  3. successivamente entra in esecuzione il terzo ciclo che inizia a reiterare le istruzioni in esso contenute
  4. uscendo da questo ciclo più interno ci si imbatte nuovamente nel secondo ciclo che viene incrementato
  5. viene ancora eseguito il terzo ciclo fino a quando anche il secondo ciclo non raggiunge il limite massimo impostato nella sua istruzione For
  6. quando anche il secondo ciclo finisce il suo percorso va ad incrementare il contatore del primo ciclo
  7. da qui si riprende dal punto 2 fino a quando anche il primo ciclo raggiunge il suo limite massimo ed esce

Nel quarto esempio:

Sostanzialmente è simile al secondo esempio, ma all'interno del ciclo estgerno ci sono due cicli interni di pari livello.

Nell'esecuzione di questo segmento di codice, con le modalità descritte nel secondo esempio, viene eseguito prima il primo ciclo interno e, quando questo finisce il suo lavoro, viene eseguito anche il secondo ciclo interno

Solo all'uscita da questo secondo ciclo viene incrementato, come nel secondo esempio, il ciclo esterno fino a quando questo non ragiunge il limite massimo indicato nella sua istruzione For

 

 

torna all'indice

 

Uscita dal ciclo

Da un ciclo si può uscire in due modi:

In modo naturale

Quando il contatore ha raggiunto il valore finale dichiarato all'inizio del ciclo viene terminato.

Uscendo dal ciclo tuttavia il contatore non avrà il valore finale imposto nella dichiarazione del ciclo, ma il valore immediatamente successivo a quello e dipende dallo Step.

In modo forzato

A volte può capitare che non è necessario completare il ciclo. Normalmente questo succede quando si verifica una determinata condizione. In questo caso per uscire si usa l'istruzione: Exit For

Dopo l'uscita forzata dal ciclo il valore che troviamo nel contatore sarà quello che aveva al momento dell'uscita:

For A = 1 To 100
B = Int(Rnd() * 100) + 1
If B < A Then Exit For
Next
'all'uscita forzata dal ciclo il valore corrente del contatore
'sarà quello che aveva al momento della imposizione
'di interrompere il ciclo

 

torna all'indice

 

Le istruzioni da scrivere in un corpo For ... Next

In un ciclo For ... Next è possibile scrivere qualsiasi istruzione che deve essere ripetuta per il numero di volte indicato nel ciclo. E' possibile leggere o scrivere i contenuti delle celle, i contenuti di matrici, elaborare dati e quant'altro.

Il contatore del ciclo può essere usato anche come puntatore agli indici di vari oggetti, agli indici delle matrici, alle celle per poter leggere o scrivere i relativi valori, agli indici dei controlli (ListBox, ComboBox, i nomi dei controlli di una UserForm).

 

torna all'indice

 

Utilizzo e manipolazione del contatore

Occorre la massima prudenza nel voler manipolare il Contatore di un ciclo.

Il contatore può essere usato anche per compiere più operazioni contemporaneamente.

 

Puntare a due oggetti diversi

Per esempio posso volere che i contenuti delle varie locazioni di una matrice vengano scritti nelle celle di un foglio di lavoro nelle varie righe della prima colonna.

Sub doppioUso()
For I = 1 To 10
usiamo il contatore del ciclo per puntare alla locazione
della matrice e lo stesso contatore aumentato di 5 per
puntare contemporaneamente alle righe del foglio di
lavoro a partire dalla 6^
Cells(I + 5, 1) = MiaMatrice(I)
Next I
End Sub

Con queste istruzioni il contatore del ciclo compie due operazioni:

Così:

ecc.

 

Usare il contatore di un ciclo per eseguire dei calcoli

Col contatore possiamo anche eseguire calcoli complessi che ci possono servire per compiere determinate azioni.

Col seguente esempio vogliamo che il contenuto della matrice venga scritto ogni 5 colonne a partire dalla colonna 1.

Sub cicli9()
Dim MiaMatrice(1 To 10)
For I = 1 To 10
MiaMatrice(I) = Cells(I, 1)
Next
For A = 1 To 10
Cells(14, A * 5 - 5 + 1) = MiaMatrice(A)
Next
End Sub

Impostiamo il ciclo "For A = 1 To 10" che va da 1 a 10

l'espressione "A * 5 - 5 + 1" inserita in "Cells(14, A * 5 - 5 + 1)" fa sì che si scriva nella riga 14 delle colonne risultanti dal calcolo "A * 5 - 5 + 1" dove "A" assume i valori da 1 a 10

così:

quando "A" sarà uguale a 1 avremo che: 1 * 5 - 5 + 1 = 1
quando "A" sarà uguale a 2 avremo che: 2 * 5 - 5 + 1 = 6
quando "A" sarà uguale a 3 avremo che: 3 * 5 - 5 + 1 = 11
quando "A" sarà uguale a 4 avremo che: 4 * 5 - 5 + 1 = 16
ecc

Con questa espressione facciamo sì che, mentre il contatore "A" continua coi suoi normali incrementi per puntare alle giuste locazione della matrice, otteniamo la coordinata della colonna dove depositare il valore letto basandoci sul valore dello stesso contatore.

Se volessimo un incremento di 10 colonne a partire dalla quinta colonna l'espressione sarebbe: "A * 10 - 10 + 5".

Qualche altro esempio di calcoli sui contatori dei cicli si possono vedere nell'articolo "Suggerimenti (aggiornabile)" esempio

 

torna all'indice

 

 

Cosa è vietato in un blocco For ... Next

Abbiamo visto che un ciclo "For ... Next" ha un contatore.

Ebbene nel corpo di questo ciclo è assolutamente vietato usare variabili con lo stesso nome del contatore per assegnargli nuovi valori in quanto in questo caso il valore di tale variabile verrebbe ad influenzare in modo inatteso, se non rovinoso, l'andamento del ciclo, nè tantomeno assegnare a tale variabile dei valori stringa.

nella migliore delle ipoesi il ciclo verrà sconvolto perchè quando il flusso di istruzioni arriverà all'istruzione "Next" si avrà un incremento del valore contenuto erroneamente in "A".

Sub cicli7()
For A = 1 To 100
A = MiaMatrice(A)
Cells(A, 1) = A
Next
End Sub

 

 

torna all'indice

 

Che cosa è sconsigliato in un blocco For ... Next

Normalmente ci si affida ad un ciclo quando è necessario eseguire delle azioni ripetitive.

A velte i cicli vengono eseguiti per un numero elevato di volte. Ne consegue che tante volte occorrono secondi prezioso prime che un'elaborazione eseguita in un ciclo restituisca il controllo dell'applicativo.

Quindi occorre essere oculati nello scrivere certe istruzioni all'interno di un ciclo.

Vediamo questo banale esenpio:

For A = 1 To 10000
B = InputBox("scrivi il nome da cercare")
If B = MiaMatrice(A) Then
Cells(A, 1) = "Ciao"
End If
Next

Scopo di questa routine è quello di cercare nella matrice un nome fornito dall'utente tramite una InputBox.

Questa istruzione, messa in questa posizione, oltre ad infastidire l'utente che, in questo caso deve rispondere alla richiesta per ben 10.000 volte, rallenta notevolmente l'esecuzione della routine.

Più corretto sarebbe essere accorti nel porre fuori del ciclo certe istruzioni che non bovrebbero essere esguite nel ciclo, come in questo caso:

B = InputBox("scrivi un nome")
For A = 1 To 10000
If B = MiaMatrice(A) Then
Cells(A, 1) = "Ciao"
End If
Next

Altro esempio, simile al precedente, meno fastidioso del precedente, ma che è pur sempre da evitare.

Durante l'esecuzione del ciclo alla variabile "B" viene in continuazione assegnato il nome "Piero". Nell'esempio riportato qui sotto nemmeno ci accorgiamo di questa cosa.

Ma notereme che l'esecuzione rallenat notevolmente se al posto di questa semplice assegnazione dobbiamo eseguire elaborazioni più complesse per ottenere il valore da assegnare alla variabile B per eseguire i confronti qui sotto indicati. La istruzione "B = "Mario"" continua ad essere ripetuta inutilmente ad ogni giro del ciclo.

 

For A = 1 To 10000
B = "Mario"
If B = MiaMatrice(A) Then
Cells(A, 1) = "Ciao"
End If
Next

Il modo più corretto di scrivere questo frammento di codice è, come sopra, quello di tirar fuori del ciclo l'assegnazione:

B = "Mario"

B = "Mario"
For A = 1 To 10
If B = MiaMatrice(A) Then
Cells(A, 1) = "Ciao"
End If
Next

Tuttavia ci sono dei casi in cui tale assegnazione è necessaria farla all'interno del ciclo come nel seguente esempio, dove, per eseguire un ordinamento, occorre che tale assegnazione venga effettuata all'interno del ciclo:

For A = 1 To 9999
For B = A + 1 To 10000
If MiaMatrice(A) > MiaMatrice(B) Then
C = MiaMatrice(A)
MiaMatrice(A) = MiaMatrice(B)
MiaMatrice(B) = C
End If
Next
Next

In questo caso è necessario eseguire l'assegnazione "C = MiaMatrice(A)" all'interno del ciclo in quanto il valore di "C" cambia mentre si legge la matrice col ciclo.

Secondo quanto ho appena esposto l'assegnazione "C = MiaMatrice(A)" anche se non è sbagliata sarebbe sconsigliata in quella posizione (all'interno del ciclo interno For B ...). Legge il contenuto della locazione puntata dal contatore "A" ma sta dopo aver impostato il secondo ciclo interno. Sempre secondo quanto ho appena esposto l'assegnazione dovrebbe essere anticipata e collocata qui:

For A = 1 To 9
C = MiaMatrice(A)
For B = A + 1 To 10
If MiaMatrice(A) > MiaMatrice(B) Then
...............

 

In questo caso, invece, sarebbe errato seguire la regola generale sopra esposta perchè, oltre a non portare al vero ordinamento dei dati che si vanno ad ordinare, causerebbe un rallentamento dell'esecuzione.

Infatti questa assegnazione, lasciata lì dove è, non viene eseguita proprio in ogni giro dei due cicli, ma solo se si verifica la determinata condizione.

 

 

torna all'indice

Chiusura forzata di un ciclo

Abbiamo visto che quando usiamo un ciclo tutte le istruzioni contenute tra For e Next nengono ripetute ciclicamente fino a quando il contatore non assume il valore massimo impostato nell'istruzione For.

Può succedere che in alcune circostanze, se si verifica una determina condizione, è inutile uscire anticipatamente dal ciclo. In questo caso è possibile usare l'istruzione Exit For la quale sposta il punto di esecuzione del programma alle istruzioni successive all'istruzione Next reliva al ciclo interrotto.

All'uscita forzata dal ciclo il contatore del ciclo conserva il valore che ha al momento dell'uscita. Solo se si esce dal ciclo il contatore assume il valore successivo al limite massimo imposto dallo Step.

Nell'esempio che segue vogliamo cercare un nome memorizzato in una matrice:

Sub Trovalo()
B = InputBox("scrivi un nome")
For A = 1 To 10000
If B = MiaMatrice(A) Then
F = True
Exit For
End If
Next
If F Then
MsgBox "Il nome è stato trovato"
Else
MsgBox "Il nome non è stato trovato"
End If
End Sub

In questo esempio vogliamo cercare nella matrice il nome inserito dall'utente.

Se il nome viene trovato si forza l'uscita anticipata dal ciclo e si passa ad eseguire le istruzioni successive all'istruzione Next, altrimenti si continua con l'esecuzione del ciclo fino alla fine.

 

Ma se stiamo lavorando con più cicli nidificati e, verificatasi una determinata circostanza, si desidera uscire da tutti i cicli la situazione è lievemente più complessa, ma facilmente intuibile.

Vediamo un altro esempio esplificativo.

For A = 1 To 50
Nome = Nomi(A)
For B = 1 To 10000
If Nome = Elenco(B) Then
FL = True
Exit For
End If
Next
If FL Then Exit For
Next
If FL Then
MsgBox "Il nome è stato trovato"
Else
MsgBox "Il nome non è stato trovato"
End If

In questo frammento di codice abbiamo due matrici:

Nomi() che contiene un elenco di nomi

Elenco() che ne contiene un altro

si eseguono dei confronti tra i nomi della prima matrice e quelli della seconda matrice.

Se il confronto risulta positivo si desidera uscire dai due cicli.

La cosa è fattibile con una variabile Booleniana che diventa True solo se il confronto è positivo.

Allora ci comportiamo in questo modo:

superato il confronto si pone a True la variabile Booleniana e si esce dal primo ciclo

All'uscita dal primo ciclo, quello interno, ci si viene a trovare nel corpo del secondo ciclo, quello esterno.

Per uscire anche da questo secondo ciclo è necessario che la variabile Booleniana sia impostata a True. In questo caso, usando un secondo Exit For verremmo a trovarci al di fuori dei due cicli nidificati e possiamo procedere con l'esecuzione del resto delle istruzioni.

 

torna all'indice