Loop e VBA vanno insieme, e anche per una buona ragione. Quando si ha a che fare con oggetti di Microsoft Office come cartelle di lavoro, fogli di lavoro e intervalli, i loop possono aiutarti a passare da uno all’altro con relativa facilità.
Mentre più o meno tutti i loop VBA funzionano bene con gli oggetti, il loop “for each” è una delle migliori opzioni per lavorare con le raccolte di oggetti. Se sei nuovo in Excel VBA e stai cercando di padroneggiare il ciclo for each, puoi imparare rapidamente da alcuni di questi esempi. Ecco tutto ciò che devi sapere su questo loop per eccellenza.
Per la sintassi di ogni ciclo
La sintassi for each loop è abbastanza simile al solito ciclo for in Excel VBA. Ecco la sintassi:
For each variable_name in object_collection
(statement)
(statement)
(statement)
Next variable_name
Il ciclo inizia con la parola chiave “for each”; è possibile utilizzare qualsiasi nome di variabile, seguito dalla raccolta di oggetti. L’oggetto nel ciclo for each può essere celle, intervalli, fogli e persino cartelle di lavoro. Tale è la bellezza di questo ciclo; ti dà la flessibilità di lavorare con diverse raccolte di Excel.
Il ciclo scorre ogni valore della raccolta e memorizza il riferimento nel nome della variabile definita. Dopo l’esecuzione, VBA esegue le istruzioni memorizzate all’interno del ciclo e passa all’oggetto successivo nella raccolta (the Prossimo la parola chiave è utile qui). Comprendiamo la struttura del codice con un esempio di base.
Come utilizzare il ciclo For Each in Excel VBA
Supponiamo di voler stampare un numero nelle celle da A1 a A10. L’approccio migliore è utilizzare il ciclo for each con la funzione range e lasciare che il codice faccia il necessario. Ecco come puoi eseguire questa semplice operazione:
- Aprire l’editor di codice VBA premendo Alt + F11.
- Inserire un modulo facendo clic su Modulo opzione all’interno del Inserire scheda.
- Crea una subroutine usando il comando sub() nella finestra del modulo dell’editor di codice. Assicurati di assegnare un nome significativo alla subroutine. Per questo esempio, puoi utilizzare il nome per_ogni_ciclo.
Ora che le basi sono fuori mano, è il momento di iniziare a scrivere il codice. All’interno della sub-routine, digita i seguenti comandi:
Dim cell as range
For each cell in Sheets(“Sheet1”).Range(“A1:A10”)
cell.value = 10
Next cell
Quando il codice viene eseguito, il C variabile memorizzerà il valore di A1. Successivamente, mentre passa all’istruzione all’interno del ciclo, valuta il comando e immette un valore pari a 10 nella cella definita, ovvero la cella A1.
Infine, mentre si sposta sulla parola chiave Next, passa al valore successivo, ad esempio la cella A2. Il ciclo viene eseguito fino a raggiungere la cella A10. Questo è l’output finale:
Utilizzo del ciclo con oggetti: celle, fogli e cartelle di lavoro
Excel ha tre tipi di oggetti principali con cui lavori regolarmente. Queste sono celle, fogli e cartelle di lavoro. Ecco come puoi usare il ciclo con tutti e tre i tipi di oggetto.
Lavorare insieme con celle e loop
Supponiamo di voler aggiungere un valore e alcune condizioni di formattazione a un intervallo di celle in Foglio1. Come primo passo, devi definire le condizioni all’interno del ciclo, seguite dai comandi di formattazione.
Digita il seguente codice all’interno di una subroutine.
Sub for_each_loop()
Dim c As Range
For Each c In Sheets(“Sheet1”).Range(“A1:A10”)
With c
.Value = 10
.Font.Color = vbRed
.Font.Bold = True
.Font.Strikethrough = True
End With
Next c
End Sub
IL con La funzione è utile quando si eseguono più funzioni con un oggetto specifico. Poiché si desidera eseguire una serie di attività con la variabile c, è possibile combinarle tutte utilizzando una funzione with..end with.
Il ciclo identifica il valore di c con ogni valore di cella e immette il valore come 10. Inoltre, cambia il colore della cella in rosso, mette in grassetto il valore e lo barra. Una volta completati tutti i passaggi, passa al successivo valore definito nell’intervallo.
Utilizzo del ciclo per controllare i fogli
Analogamente all’esempio precedente, è possibile utilizzare il ciclo for each per controllare i fogli. Che ne dici di cambiare il nome di Foglio1 in Foglio3 usando VBA?
È possibile utilizzare il seguente codice per rinominare un foglio di lavoro esistente in Excel utilizzando VBA:
Sub for_each_loop_sheets()
For Each sht In ThisWorkbook.Sheets
If sht.Name = “Sheet1” Then
sht.Name = “Sheet3”
End If
Next sht
End Sub
Il codice scorre ogni foglio all’interno della cartella di lavoro e controlla il nome di ogni foglio. Se incontra il nome Foglio1, lo cambia in Foglio3. Avanza attraverso i fogli rimanenti, se presenti, all’interno della cartella di lavoro. Una volta che l’esecuzione del codice raggiunge l’ultimo foglio, esce dal ciclo e dalla subroutine.
Tra alcuni altri usi comuni, puoi unire più fogli di lavoro utilizzando VBA e aggiornare il contenuto in un singolo foglio utilizzando i loop.
Passa attraverso le cartelle di lavoro con il ciclo
Infine, puoi utilizzare il ciclo for each per passare da una cartella di lavoro all’altra ed eseguire attività specifiche. Dimostriamo questa funzione con un esempio.
Puoi utilizzare i comandi VBA per aggiungere tre nuove cartelle di lavoro e chiudere insieme tutte quelle aperte. Ecco come puoi farlo:
Sub loop_wrkbook()
Dim wrkbook as workbook
Workbooks.Add
Workbooks.Add
Workbooks.Add
For Each wrkbook In Workbooks
wrkbook.Close
Next wrkbook
End Sub
Il codice sopra chiuderà anche la tua cartella di lavoro macro; assicurati di aver salvato i tuoi codici prima di eseguire questo codice.
Poiché i cicli hanno più usi, puoi anche consolidare i dati di più cartelle di lavoro in un’unica cartella di lavoro.
Utilizzo di un’istruzione IF annidata con il ciclo
Come nell’esempio precedente, puoi utilizzare un’istruzione IF all’interno del ciclo per verificare condizioni specifiche. Cambiamo il colore di sfondo della cella in base ai valori della cella.
Ci sono alcuni numeri casuali nelle celle A1:A20. Puoi scrivere un ciclo per scorrere ogni data cella nell’intervallo; se il valore della cella è inferiore a 10, il colore della cella dovrebbe diventare rosso. Se il valore della cella supera 10, dovrebbe diventare verde. Utilizzare il seguente codice per questo scopo:
Sub loop_w_if()
Dim c As Range
For Each c In Sheets(“Sheet4”).Range(“A1:A20”)
If c.Value < 10 Then
c.Interior.ColorIndex = 3
Else: c.Interior.ColorIndex = 4
End If
Next c
End Sub
Ecco come appare l’output:
Utilizzo di loop in Excel VBA
Excel VBA non è limitato solo al ciclo for each. Ci sono una varietà di loop utili che ti consentono di eseguire diverse funzioni con facilità. Dì addio alle attività banali e manuali, poiché i loop di VBA come il ciclo for, do while e do until entrano in gioco i loop per semplificarti la vita.