Cicli in VBA

Ci sono situazioni in cui un programma VBA deve eseguire la stessa serie di azioni più volte di seguito (ovvero, ripetere più volte lo stesso blocco di codice). Questo può essere fatto usando i loop VBA.

I loop VBA includono:

Successivamente, daremo un'occhiata più da vicino a ciascuno di questi cicli.

Operatore Ciclo For in Visual Basic

La struttura dell'operatore di loop I in Visual Basic può essere organizzato in due forme: come un ciclo Per il prossimo o come un ciclo Per ciascuno.

Ciclo "Per... Avanti"

Ciclo Per il prossimo utilizza una variabile che prende in sequenza valori da un determinato intervallo. Ad ogni modifica del valore della variabile vengono eseguite le azioni racchiuse nel corpo del ciclo. Questo è facile da capire da un semplice esempio:

Per i = da 1 a 10 Totale = Totale + iArray(i) Avanti i

In questo semplice ciclo Per il prossimo viene utilizzata la variabile i, che prende in sequenza i valori 1, 2, 3, … 10, e per ciascuno di questi valori viene eseguito il codice VBA all'interno del ciclo. Pertanto, questo ciclo somma gli elementi dell'array. iArray in variabile Totale.

Nell'esempio precedente, l'incremento del ciclo non è specificato, quindi per incrementare la variabile i da 1 a 10, l'impostazione predefinita è un incremento 1… Tuttavia, in alcuni casi è necessario utilizzare valori di incremento diversi per il loop. Questo può essere fatto usando la parola chiave stepcome mostrato nel seguente semplice esempio.

Per d = da 0 a 10 Passaggio 0.1 dTotale = dTotale + d Successivo d

Poiché nell'esempio sopra, il passo di incremento è impostato uguale a 0.1, quindi la variabile dTotale per ogni ripetizione del ciclo assume i valori 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Per determinare il passaggio del ciclo in VBA, puoi utilizzare un valore negativo, ad esempio, in questo modo:

For i = 10 To 1 Step -1 iArray(i) = i Next i

Ecco l'incremento -1, quindi la variabile i ad ogni ripetizione del ciclo assume i valori 10, 9, 8,…1.

Ciclo "Per ciascuno"

Ciclo Per ciascuno simile a un ciclo Per il prossimo, ma invece di scorrere la sequenza di valori per la variabile contatore, il ciclo Per ciascuno esegue una serie di azioni per ogni oggetto nel gruppo di oggetti specificato. Nell'esempio seguente, usando un ciclo Per ciascuno enumera tutti i fogli nella cartella di lavoro di Excel corrente:

Oscura wSheet come foglio di lavoro per ogni wSheet nei fogli di lavoro MsgBox "Найден лист: " & wSheet.Name Next wSheet

Istruzione di interruzione del ciclo "Esci per"

Operatore Esci per utilizzato per interrompere il ciclo. Non appena questa istruzione viene incontrata nel codice, il programma termina l'esecuzione del ciclo e procede all'esecuzione delle istruzioni che sono nel codice immediatamente dopo questo ciclo. Questo può essere utilizzato, ad esempio, per cercare un valore specifico in una matrice. Per fare ciò, utilizzando un ciclo, viene scansionato ogni elemento dell'array. Non appena viene trovato l'elemento richiesto, non è necessario esaminare il resto: il ciclo viene interrotto.

Applicazione dell'operatore Esci per dimostrato nell'esempio seguente. Qui il ciclo itera oltre 100 voci di array e confronta ciascuna con il valore della variabile dVal… Se viene trovata una corrispondenza, il ciclo viene terminato:

For i = 1 To 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next i

Il ciclo Do While in Visual Basic

Ciclo Fare mentre esegue un blocco di codice fintanto che la condizione specificata è soddisfatta. Quello che segue è un esempio di una procedura Sub, in cui si utilizza il ciclo Fare mentre I numeri di Fibonacci non superiori a 1000 vengono visualizzati in sequenza:

'Sub procedura emette numeri di Fibonacci non superiori a 1000 Sub Fibonacci() Dim i As Integer 'contatore per indicare la posizione dell'elemento nella sequenza Dim iFib As Integer 'memorizza il valore corrente della sequenza Dim iFib_Next As Integer 'memorizza il valore successivo della sequenza Dim iStep As Integer 'memorizza la dimensione dell'incremento successivo 'inizializza le variabili i e iFib_Next i = 1 iFib_Next = 0 'Do While il ciclo verrà eseguito fino a quando il valore del 'numero di Fibonacci corrente è maggiore di 1000 Do While iFib_Next < 1000 If i = 1 Then 'caso speciale per il primo elemento iStep = 1 iFib = 0 Else 'salva la dimensione dell'incremento successivo prima di sovrascrivere 'il valore corrente della sequenza iStep = iFib iFib = iFib_Next End If 'stampa il numero di Fibonacci corrente nella colonna A di il foglio di lavoro attivo 'nella riga con indice i Cells(i , 1).Value = iFib 'calcola il numero di Fibonacci successivo e incrementa l'indice di posizione dell'elemento di 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Nell'esempio fornito, la condizione iFib_Next < 1000 controllato all'inizio del ciclo. Pertanto, se il primo valore iFib_Avanti Se ce ne fossero più di 1000, il ciclo non verrebbe mai eseguito.

Un altro modo per implementare un ciclo Fare mentre - porre la condizione non all'inizio, ma alla fine del ciclo. In questo caso, il ciclo verrà eseguito almeno una volta, indipendentemente dal fatto che la condizione sia soddisfatta.

Schematicamente, un tale ciclo Fare mentre con la condizione da verificare alla fine sarà simile a questa:

Esegui ... Ciclo mentre iFib_Next < 1000

Цикл «Fai fino a» in Visual Basic

Ciclo Fai fino a molto simile al ciclo Fare mentre: il blocco di codice nel corpo del ciclo viene eseguito più e più volte finché non viene soddisfatta la condizione specificata (il risultato dell'espressione condizionale è I veri). Nella procedura successiva Sub usando un ciclo Fai fino a recuperare i valori da tutte le celle in una colonna A foglio di lavoro finché la colonna non incontra una cella vuota:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'Il valore della cella corrente è memorizzato nell'array dCellValues ​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

Nell'esempio sopra, la condizione Èvuoto(Cells(iRow, 1)) situato all'inizio della struttura Fai fino a, quindi il ciclo verrà eseguito almeno una volta se la prima cella presa non è vuota.

Tuttavia, come mostrato negli esempi di loop Fare mentre, in alcune situazioni è necessario che il ciclo venga eseguito almeno una volta, indipendentemente dal risultato iniziale dell'espressione condizionale. In questo caso, l'espressione condizionale dovrebbe essere posta alla fine del ciclo, in questo modo:

Esegui ... Ciclo fino a quando non è vuoto(Cells(iRow, 1))

Lascia un Commento