Vba for loop (per successivo, per ciascuno)
Punti chiave
- I cicli For VBA sono tipi di cicli fissi.
- Non è possibile utilizzare uno di questi loop durante la registrazione di una macro .
Per il ciclo successivo
VBA FOR NEXT è un ciclo fisso che utilizza un contatore per eseguire iterazioni. In termini semplici, è necessario specificare il numero di volte in cui si desidera eseguire il ciclo e, una volta raggiunto quel numero di cicli, si interromperà automaticamente. Questo è il motivo per cui è un ciclo fisso e molto popolare tra gli sviluppatori VBA.
Sintassi
Ecco la sintassi del ciclo VBA For Next:
For counter = Start To End [Step stepsize] [statements] Next [counter]
- Contatore : è una variabile che memorizza il numero di ripetizioni e aumenta il suo valore ad ogni ripetizione. Ad esempio, se il ciclo è alla quinta iterazione, il valore del contatore sarà cinque e una volta che il ciclo esegue l’istruzione per la quinta iterazione, il valore del contatore cambia in sei.
- Inizio : è una variabile numerica che memorizza il valore iniziale del contatore.
- Fine : è una variabile numerica che memorizza il valore finale del contatore.
- Dimensione passo : questa variabile specifica un notevole aumento o diminuzione del valore del contatore. Per impostazione predefinita, la dimensione del passo è una, ma è possibile utilizzare anche qualsiasi valore positivo o negativo.
- Istruzione : questo è un set di codice che desideri eseguire su ogni iterazione del ciclo For Next.
- Successivo : questa è l’istruzione finale per un’iterazione del ciclo e utilizza il valore del contatore per indicare a VBA di ripetere il ciclo e una volta che il contatore raggiunge il valore finale, termina il ciclo.
Esempio da comprendere per il ciclo successivo
Per capire come usarlo per il ciclo successivo, scriviamo un semplice codice per aggiungere numeri di serie in una colonna.
Lasciami elaborare un po’ di più: dobbiamo scrivere un codice che possa andare dalla cella selezionata alle successive 10 celle una per una e aggiungere numeri di serie solo nell’istantanea qui sotto.
Per utilizzare For Next Loop, è possibile seguire i seguenti passaggi:
- Innanzitutto, devi dichiarare una variabile che puoi utilizzare per memorizzare il valore del contatore.
- Successivamente, dobbiamo assegnare il valore del contatore alla variabile.
- Ora è il momento di scrivere il codice per il ciclo, quindi nella prima riga devi utilizzare la variabile contatore e impostare i valori iniziale e finale. Qui in questo codice hai la variabile “i” come valore finale.
- Da lì, devi scrivere il codice che può aggiungere i numeri di serie nella cella attiva e poi passare alla cella successiva. Man mano che il valore del contatore aumenta ad ogni iterazione, puoi usarlo per inserire il numero di serie nella cella attiva e successivamente puoi usare il tasto Maiusc per spostare la selezione verso il basso nella cella successiva.
- Alla fine, usa la parola chiave successiva e la variabile contatore per completare il codice del ciclo.
Sub AddSerialNumbers() Dim i As Integer i = 10 For i = 1 To i ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate Next i End Sub
Puoi vedere nell’istantanea qui sotto, quando eseguo questo codice, inizia dalla cella selezionata inserendo un numero di serie e poi passa alla cella successiva in ogni iterazione.
Come sai For Next è un ciclo fisso e in questo codice quando assegni un valore numerico indica a VBA di eseguire il ciclo quel numero di volte.
Di seguito puoi vedere l’istantanea che ho scattato nella seconda iterazione del ciclo in cui il valore della variabile del contatore “i” è due.
Il punto che sto cercando di sottolineare è che la variabile count cambia il suo valore ad ogni iterazione e inserisce quel valore nella cella attiva, quindi lo spostamento attiva la cella successiva verso il basso che completa un’iterazione.
Alla fine, la parola chiave “Avanti” è VBA per tornare alla prima riga del ciclo e ripeterlo. Come hai visto nella sintassi For Next, puoi anche utilizzare un valore di passo nel ciclo per far funzionare il contatore in base a quello.
Pertanto, se utilizzi due come valore del passaggio, il codice sarà simile al seguente.
Sub AddSerialNumbers() Dim i As Integer i = 10 For i = 1 To i Step 2 ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate Next i End Sub
E quando esegui questo codice, nell’attività sarà presente qualcosa di simile all’istantanea qui sotto.
Quando utilizzi un valore di passaggio (come il passaggio 2, che hai utilizzato nel codice sopra), VBA ignora ogni seconda iterazione nel ciclo e, come puoi vedere, hai cinque numeri con la differenza di uno in ciascun numero.
Nota : nell’esempio precedente, hai utilizzato “i” come variabile contatore, ma puoi anche utilizzare un nome diverso a tuo piacimento.
Per ogni ciclo successivo
VBA FOR EACH NEXT è un ciclo fisso che può scorrere tutti gli oggetti in una raccolta. In For Each Next non è necessario specificare il numero di iterazioni. Invece, puoi specificare una raccolta di oggetti e sarà in grado di scorrere tutti quegli oggetti uno per uno.
Ad esempio : se desideri sfogliare tutte le celle in un intervallo. In questo caso l’ intervallo è la raccolta e le celle sono gli oggetti che hai.
Sintassi
Ecco la sintassi VBA per ogni ciclo successivo:
For Each Object In Collection [statements] Next [object]
- Oggetto : rappresenta l’unico oggetto nella raccolta di oggetti su cui stai scorrendo. Ad ogni iterazione passa da un oggetto all’altro.
- Raccolta : questa è una raccolta di oggetti che desideri scorrere.
- Istruzione : righe di codice che si desidera eseguire in ogni ciclo attraverso tutti gli oggetti nella raccolta.
- Successivo : questa è l’istruzione finale di un’iterazione del ciclo e indica a VBA di passare all’oggetto successivo nella raccolta.
Esempio per comprendere il ciclo For Each Next
Per comprendere il ciclo For Each Next, scriviamo il codice per nascondere tutti i fogli diversi dal foglio di lavoro attivo. Questo codice controllerà il nome di ciascun foglio di lavoro e lo abbinerà al nome del foglio di lavoro attivo e lo nasconderà se non corrisponde.
Per utilizzare il ciclo For Each Next, è possibile seguire i seguenti passaggi:
- Innanzitutto, devi dichiarare una variabile da utilizzare come foglio di lavoro.
- Successivamente, utilizza la parola chiave “For Each”, quindi la variabile “mySheet” per il foglio e utilizza “ActiveWorkbook.Worksheets” per la raccolta di fogli di lavoro della cartella di lavoro attiva.
- Successivamente, è necessario utilizzare l’istruzione IF VBA per verificare se il nome del foglio che si trova attualmente in questa iterazione del ciclo NON È UGUALE al foglio di lavoro attivo e, se questa condizione è vera, nascondere il foglio che è ora nel ciclo iterazione.
- Alla fine, hai la parola chiave NEXT e “mySheet” la variabile per completare il codice del ciclo.
Codice finale:
Sub Hide_Other_Sheets() Dim mySheet As Worksheet For Each mySheet In ActiveWorkbook.Worksheets If mySheet.Name <> ActiveSheet.Name Then mySheet.Visible = False End If Next mySheet End Sub
Quando esegui questo codice , passa attraverso ogni foglio di lavoro nella cartella di lavoro attiva e abbina il suo nome al foglio di lavoro attivo e, se il nome del foglio di lavoro non corrisponde al nome del foglio di lavoro attivo, lo fa. maschera.
In questo modo tutti i fogli di lavoro verranno nascosti.