logo di Marco Braglia

Il ciclo intelligente for each nelle macro vba in Excel

MACRO VBA
4 minuti di lettura

In questo articolo esploriamo insieme una modalità intelligente per eseguire dei cicli con le nostre amate macro in excel: il ciclo for each.

Se preferisci il formato video, ecco qui il link al mio video YouTube dove tratto questo argomento.

Il ciclo "for" classico

Prima di esplorare il ciclo For Each, è importante comprendere il funzionamente base del ciclo For classico, che è uno strumento fondamentale nella programmazione VBA (e in realtà in tutti i linguaggi di programmazione): la ripetizione di un blocco di codice per un numero predefinito di iterazioni.

Vediamo qualche esempio.

Supponiamo di voler eseguire un'operazione ripetitiva un numero specifico di volte. Qui, il ciclo For è ideale. Per esempio, per stampare i numeri da 1 a 10:

Sub ConteggioNumerico()
    Dim i As Integer
    For i = 1 To 10
        Debug.Print i
        'Altre istruzioni possono essere aggiunte qui
    Next i
End Sub

Questo script esegue un'operazione (stampa del numero) per ogni valore di i da 1 a 10. È un esempio chiaro di come il ciclo For gestisca operazioni basate su un conteggio numerico predeterminato.

Il ciclo "for each"

Dopo aver compreso il ciclo For, possiamo apprezzare meglio il ciclo For Each, che offre un approccio diverso e spesso più flessibile.

Il For Each ("Per Ognuno" in italiano) è un ciclo intelligente, versatile e flessibile. A differenza del ciclo For classico, non è necessario specificare a priori quante iterazioni deve fare. Lui lo sa automaticamente in base agli oggetti che gli diciamo di ciclare.

Sintassi base del ciclo For Each:

For Each Element In Group
    'Istruzioni da eseguire
    'Uscita dal ciclo con "Exit For" se necessario
Next Element

Element è una variabile usata per iterare gli oggetti, mentre Group rappresenta l'insieme degli oggetti e può essere un array o una collection.

Esempio 1: scorrere tutti i fogli di una cartella di lavoro

Immagina di avere una cartella di lavoro composta da diversi fogli. Ogni foglio potrebbe contenere dati unici, tabelle, o formattazioni specifiche. Una delle necessità comuni quando si lavora con macro è quella di eseguire un'operazione su ogni foglio.

Invece di scrivere codice ripetitivo per ogni foglio, possiamo sfruttare il ciclo For Each per automatizzare il processo. Questo ci permette di eseguire una serie di istruzioni su ogni foglio della cartella di lavoro, senza la necessità di specificare i nomi dei fogli o il loro numero totale.

Codice di Esempio:

Sub TestForEach()
    Dim ws As Worksheet
 
    For Each ws In ThisWorkbook.Worksheets
        Debug.Print ws.Name
        'Qui puoi aggiungere altre istruzioni da eseguire su ogni foglio
    Next ws
End Sub

Questo script effettua un'iterazione su ogni foglio di lavoro, stampando il suo nome. Puoi facilmente modificare o aggiungere altre istruzioni all'interno del ciclo per adattarlo alle tue esigenze.

Esempio 2: scorrere tutte le tabelle di tutti i fogli

Ora, immagina di voler lavorare non solo con i fogli, ma anche con le tabelle (ListObjects) presenti in essi. In una cartella di lavoro con molti fogli, ognuno contenente diverse tabelle, sarebbe molto dispendioso e soggetto ad errori tentare di accedere a ogni tabella manualmente.

Qui entra in gioco il ciclo For Each annidato. Questo approccio ci consente di esaminare ogni tabella in ogni foglio, eseguendo operazioni specifiche su di esse. Può trattarsi, ad esempio, di modificare la formattazione, aggiornare i dati, o estrarre informazioni.

Codice di Esempio:

Sub TestForEachNesting()
    Dim ws As Worksheet
    Dim tbl As ListObject
 
    For Each ws In ThisWorkbook.Worksheets
        For Each tbl In ws.ListObjects
            Debug.Print ws.Name & "-" & tbl.Name
            'Qui puoi aggiungere altre istruzioni da eseguire su ogni tabella
        Next tbl
    Next ws
End Sub

In questo script, eseguiamo un ciclo su ogni foglio e, per ogni foglio, eseguiamo un ulteriore ciclo su tutte le sue tabelle. Questo esempio stampa il nome di ogni foglio seguito dal nome delle sue tabelle.

Confronto e Conclusioni

Il ciclo For classico è ideale per situazioni dove si conosce a priori il numero di iterazioni necessarie. È utilizzato per eseguire un'operazione un numero definito di volte, come un conteggio numerico. È poco flessibile quando si lavora con collezioni di oggetti.

Al contrario, il ciclo For Each è più adatto quando si lavora con una collezione di oggetti (come fogli o tabelle in Excel) e si desidera eseguire un'operazione su ciascuno di essi. Non è necessario conoscere il numero di oggetti in anticipo; il ciclo gestisce automaticamente ogni elemento della collezione.

Ricorda, il ciclo giusto dipende dal contesto specifico del tuo progetto in Excel.

Ci si vede nel gruppo Facebook.

#ExcelHaSempreRagione