Se stai scrivendo un programma VBA e vuoi eseguire la stessa attività più volte, puoi farlo usando VBA for loop. VBA è un linguaggio di programmazione sequenziale. Ogni riga di codice viene eseguita dall'alto verso il basso finché non ci sono più righe di codice da leggere. Se vuoi tornare indietro ed eseguire un'attività, devi forzare usando il codice macro. Ottieni risultati con loop.
Il For Loop in VBA è uno dei tipi più comuni di loop. Il ciclo For ha due forme: For Next e For Each In Next. Il ciclo For viene in genere utilizzato per spostarsi in sequenza attraverso un elenco di elementi o numeri. Per terminare il ciclo For in un dato punto, possiamo usare l'istruzione exit. For Loop andrà in tondo finché non soddisfa la condizione finale. Una volta soddisfatta la condizione di fine, il flusso di programmazione continuerà verso il basso, nella sua direzione naturale.
Il ciclo For… Next ha la seguente sintassi: For counter = start_counter To end_counter 'Fai qualcosa qui (il tuo codice) Next counter
In realtà stiamo creando un ciclo che usa la variabile contatore come 'time keeper' del ciclo. Lo impostiamo ad un valore pari a contatore_inizio all'inizio del ciclo e poi incrementarlo di 1 durante ogni ciclo finché non soddisfa la condizione di fine. Il ciclo verrà eseguito fino al momento in cui il valore di contatore diventa uguale a end_counter. Il ciclo viene eseguito per l'ultima volta quando entrambi i valori precedenti corrispondono e quindi il ciclo si interrompe.
Tutto quanto sopra potrebbe essere fonte di confusione per alcune persone, quindi prepariamoci e iniziamo a imparare For Loop in Excel con alcuni esempi.
- Crea una nuova cartella di lavoro Excel, quindi salvala con l'estensione .xlsm
- Per avviare la schermata dell'editor di Visual Basic, usa ALT + F11
- Inserisci nuovo modulo
- Copia il codice seguente nel modulo standard VB
Loop 1 (visualizzazione del numero con msgbox)
Sub Loop1() Dim StartNumber As Integer Dim EndNumber As Integer EndNumber = 5 For StartNumber = 1 To EndNumber MsgBox StartNumber & " è " & "Your StartNumber" Next StartNumber End Sub
Spiegazione del codice:
- Il codice VBA richiede che tu assegni un valore a StartNumber, dove EndNumber sono variabili dichiarate come numeri interi come punto di partenza per il tuo ciclo
- Questi valori possono essere qualsiasi numero e abbiamo EndNumber come 5
- StartNumber inizia da 1
- Per StartNumber = 1 To EndNumber significa che il codice inizierà da 1 (StartNumber) a 5 (EndNumber)
- MsgBox StartNumber & " is " & "Your StartNumber" visualizzerà la seguente finestra di messaggio
Loop2 (valori di riempimento)
Sub Loop2() 'Riempe le celle A1:A56 con i valori di X eseguendo un ciclo' --- Commento 'Aumenta il valore di X di 1 in ogni ciclo' --- Commento Dim X As Integer For X = 1 To 56 Range("A " & X).Value = X Next X End Sub
Spiegazione del codice:
- Abbiamo assegnato X come intero
- Per X = da 1 a 56; questo inizierà con 1 e continuerà fino a 56 con un incremento di 1 ogni volta
- Intervallo("A" & X).Valore = X; questa riga memorizzerà il valore di X e passerà al range da A1 ad A56
Loop3 (Riempi le celle con il colore di sfondo)
Sub Loop3() 'Riempe le celle B1:B56 con i 56 colori di sfondo' --- Comment Dim X As Integer For X = 1 To 56 Range("B" & X).Select With Selection.Interior .ColorIndex = X .Pattern = xlSolid End With Next X End Sub
Spiegazione del codice:
- Abbiamo assegnato X come intero
- Per X = da 1 a 56 inizierà con 1 e continuerà fino a 56 con un incremento di 1 ogni volta
- Intervallo("B" e X).Seleziona; questa riga memorizzerà il valore di X e selezionerà la cella B1 fino a B56
- Le prossime 4 righe, ad esempio With Selection.Interior, selezioneranno il colorindex interno e prenderanno il valore da X di quel colorindex in modo tale che 1 appartenga al colore nero; 2 appartiene al colore bianco; 3 per il rosso e così via
Loop 4 (Riempi valori con incremento di 2)
Per impostazione predefinita, il valore del passo è avanti 1, tuttavia può essere impostato su un numero maggiore di 1.
Sub Loop4() 'Riempe ogni seconda cella da C1:C50 con i valori di X' --- Comment Dim X As Integer For X = da 1 a 50 Step 2 Range("C" & X).Value = X Next X End Sub
Spiegazione del codice:
- Abbiamo assegnato X come intero
- Per X = da 1 a 50 Passaggio 2; questo inizierà con 1 in X fino a 50 con un incremento di 2 ogni volta
- Intervallo("C" & X).Valore = X; questa riga memorizzerà il valore di X e passerà all'intervallo da C1 a C50
Loop 5 (VBA For Loop in Reverse con istruzione STEP)
Non è necessario che il contatore nel ciclo For si sposti solo da valori bassi a valori più alti; invece, il ciclo For può essere eseguito anche all'indietro, ad esempio valori da alti a bassi.
Anche se il valore Step è avanti 1 per impostazione predefinita, tuttavia, può essere impostato su un numero in ordine inverso.
Sub Loop5() ' Riempie le celle da D1:D50 con i valori di X' --- Commento ' In questo caso X diminuisce di 1' --- Comment Dim X As Integer, Row As Integer Row = 1 For X = 50 To 0 Passaggio -1 Intervallo ("D" e riga). Valore = X Riga = Riga + 1 Prossimo X End Sub
Spiegazione del codice:
- Abbiamo assegnato X e Riga come numeri interi
- La riga contiene il valore 1
- Per X = da 50 a 0 Passaggio -1; questo inizierà da 50 con decremento di 1 in X fino a 0
- Intervallo("D" &Riga).Valore = X; questa riga memorizzerà il valore di X e passerà all'intervallo da D1 a D50
Loop 6 (riempie ogni seconda cella in Reverse con STEP-2)
Nell'esempio precedente del ciclo For, possiamo usare Step and order per vedere se il ciclo For funziona in avanti o indietro.
Sub Loop6() ' Riempie ogni seconda cella da E1:E100 con i valori di X' --- Comment ' In questo caso X diminuisce di 2' --- Comment Dim X As Integer, Row As Integer Row = 1 For X = 100 A 0 Passaggio -2 Intervallo ("E" e riga). Valore = Riga X = Riga + 2 Prossimo X End Sub
Spiegazione del codice:
- Abbiamo assegnato X e Riga come numeri interi
- La riga contiene il valore 1
- Per X = da 100 a 0 Passaggio -2; questo partirà da 100 con decremento di 2 in X fino a 0
- Intervallo("E" &Riga).Valore = X; questa riga memorizzerà il valore di X e passerà all'intervallo da E1 a E100
Loop 7 (Per Loop con condizione IF: riempie le celle a partire da una cella specifica)
Questo riempirà le celle della cella F11 con il valore 11 finché X non soddisfa la condizione IF
Sub Loop7() ' Inizia a riempire le celle F11:F100 con i valori di X' --- Comment ' Questo uscirà dal ciclo dopo 50' --- Comment Dim X As Integer For X = 11 To 100 Range ("F" & X).Value = X If X = 50 Then MsgBox ("Bye Bye") Exit For End If Next X End Sub
Spiegazione del codice:
- Abbiamo assegnato X come intero
- Per X = da 11 a 100; inizierà da 11 con incremento di 1 in X fino a quando la condizione non si soddisfa
- Intervallo("F" &X).Valore = X; questa riga memorizzerà il valore di X e passerà all'intervallo F11 fino a quando la condizione non sarà soddisfatta
- Dopo aver inserito il valore 50 nella cella F50, verrà visualizzata la seguente finestra di messaggio
Conclusione: Con i 7 esempi precedenti, possiamo applicare il ciclo For nella nostra parte normale o di automazione.
Se ti è piaciuto il nostro blog, condividilo con i tuoi amici su Facebook. E puoi anche seguirci su Twitter e Facebook.
Ci piacerebbe avere tue notizie, facci sapere come possiamo migliorare, completare o innovare il nostro lavoro e renderlo migliore per te. Scrivici al sito di posta elettronica