Sommario:
- Un esempio For-Next
- Esempi For-Next con Step
- Un esempio For-Next con un'istruzione Exit For
- Un esempio For-Next annidato
Video: Excel VBA: estrarre informazioni da un database 2025
Il tipo più semplice di loop nella programmazione VBA di Excel è un ciclo For-Next. Il ciclo è controllato da una variabile contatore, che inizia da un valore e si ferma su un altro valore. Le istruzioni tra l'istruzione For e l'istruzione Next sono le istruzioni che vengono ripetute nel ciclo.
Un esempio For-Next
L'esempio seguente utilizza un ciclo For-Next per sommare i primi 1 000 numeri positivi. La variabile Totale inizia come zero. Quindi si verifica il loop. La variabile Cnt è il contatore del ciclo. Inizia come 1 e viene incrementato di 1 ogni volta attraverso il ciclo. Il ciclo termina quando Cnt è 1, 000.
Questo esempio ha solo un'istruzione all'interno del ciclo. Questa affermazione aggiunge il valore di Cnt alla variabile Totale. Al termine del ciclo, una MsgBox visualizza la somma dei numeri.
SubAddNumbers () Dim Totale As Double Dim Cnt As Long Totale = 0 Per Cnt = 1 To 1000 Totale = Total + Cnt Successivo Cnt MsgBox Totale End Sub
Poiché il contatore di cicli è una variabile normale, è possibile scrivere codice per cambiare il suo valore all'interno del blocco di codice tra le istruzioni For e Next. Questo, tuttavia, è una pratica pessima .
Esempi For-Next con Step
È possibile utilizzare un valore Step per saltare alcuni valori del contatore in un ciclo For-Next. Ecco l'esempio precedente, riscritto per sommare solo i numeri dispari compresi tra 1 e 1, 000:
SubOddNumeri () Dim Totale As Double Dim Cnt As Long Totale = 0 Per Cnt = 1 A 1000 Step 2 Totale = Totale + Cnt Next Cnt MsgBox Total End Sub
Questa volta, Cnt inizia come 1 e quindi assume valori di 3, 5, 7 e così via. Il valore Step determina come viene incrementato il contatore. Si noti che il valore del ciclo superiore (1000) non viene effettivamente utilizzato poiché il valore più alto di Cnt sarà 999.
Ecco un altro esempio che utilizza un valore Step di 3. Questa procedura funziona con il foglio attivo e applica ombreggiatura grigio chiaro a ogni terza riga, dalla riga 1 alla riga 100.
Sub ShadeEveryThirdRow () Dim i As Long For i = 1 To 100 Step 3 Rows (i). Interni. Colore = RGB (200, 200, 200) Next i End Sub
Controlla il risultato dell'esecuzione di questa macro.
Un esempio For-Next con un'istruzione Exit For
Un ciclo For-Next può includere anche una o più istruzioni Exit For all'interno del ciclo. Quando VBA rileva questa istruzione, il ciclo termina immediatamente.
L'esempio seguente mostra l'istruzione Exit For. Questa routine è una procedura Function, destinata a essere utilizzata in una formula del foglio di lavoro.La funzione accetta un argomento (una variabile denominata Str) e restituisce i caratteri a sinistra della prima cifra numerica. Ad esempio, se l'argomento è "KBR98Z", la funzione restituisce "KBR. "
Funzione TextPart (Str) Dim i As Long TextPart =" "per i = 1 To Len (Str) If IsNumeric (Mid (Str, i, 1)) Quindi Esci da Else TextPart = TextPart & Mid (Str, i, 1) End If Next i End Function
Il ciclo For-Next inizia con 1 e termina con il numero che rappresenta il numero di caratteri nella stringa. Il codice utilizza la funzione Mid di VBA per estrarre un singolo carattere all'interno del ciclo. Se viene trovato un carattere numerico, viene eseguita l'istruzione Exit For e il ciclo termina prematuramente.
Se il carattere non è numerico, viene aggiunto al valore restituito (che è lo stesso del nome della funzione). L'unica volta che il ciclo esaminerà ogni carattere è se la stringa passata come argomento non contiene caratteri numerici.
Un esempio For-Next annidato
È possibile avere un numero qualsiasi di istruzioni nel ciclo e annidare i cicli For-Next all'interno di altri cicli For-Next.
L'esempio seguente utilizza un ciclo For-Next annidato per inserire numeri casuali in un intervallo di celle di 12 righe per 5 colonne. Si noti che la routine esegue il ciclo interno (il ciclo con il contatore Riga) una volta per ciascuna iterazione del ciclo esterno (il ciclo con il contatore Col). In altre parole, la routine esegue l'istruzione Cells (Row, Col) = Rnd 60 volte.
Sub FillRange () Dim Col As Long Dim Row As Long Per Col = 1 A 5 per Row = 1 To 12 Cells (Row, Col) = Rnd Next Row Successivo Col End Sub
Il prossimo esempio usa nidificato Per -Prossimi successivi per inizializzare una matrice tridimensionale con il valore 100. Questa routine esegue l'istruzione nel mezzo di tutti i cicli (l'istruzione di assegnazione) 1, 000 volte (10 * 10 * 10), ogni volta con una combinazione diversa di valori per i, j, ek:
Sub NestedLoops () Dim MyArray (10, 10, 10) Dim i As Long Dim j As Long Dim k As Long For i = 1 To 10 For j = 1 To 10 Per k = da 1 a 10 MyArray (i, j, k) = 100 Avanti k Successivo j Successivo i 'Altre istruzioni vai qui End Sub
Ecco un esempio finale che utilizza i cicli For-Next annidati, con un valore Step. Questa procedura crea una scacchiera cambiando il colore di sfondo delle celle alternate.
Il contatore delle file scorre da 1 a 8. Un costrutto If-Then determina quale struttura annidata For-Next usare. Per le righe dispari, il contatore Col inizia con 2. Per le righe con numero pari, il contatore Col inizia con 1. Entrambi i cicli usano un valore Step di 2, quindi le celle alternative sono interessate. Due ulteriori istruzioni rendono le celle quadrate (proprio come una vera scacchiera).
Sub MakeCheckerboard () Dim R As Long, C As Long For R = 1 To 8 Se WorksheetFunction. IsOdd (R) Then For C = 2 To 8 Step 2 Celle (R, C). Interni. Colore = 255 Successivo C Else per C = da 1 a 8 Fase 2 Celle (R, C). Interni. Colore = 255 Successivo C End If Next R Rows ("1: 8").RowHeight = 35 Columns ("A: H"). ColumnWidth = 6. 5 End Sub
