.st0{fill:#FFFFFF;}

Excel Esperto, Macro e VBA

Macro Excel: usare i cicli VBA in azienda

 Gennaio 21, 2020

By  Damiano Causale

  • Home
  • Macro Excel: usare i cicli VBA in azienda

In questo articolo ti mostrerò tante macro Excel con l’utilizzo dei cicli VBA. Se è la prima volta che senti parlare dei cicli in VBA Excel allora preparati a scoprire una delle tecniche di programmazione più potenti. Scopri come usare i cicli VBA in azienda.

Imparerai a utilizzare questi potenti strumenti nel tuo lavoro in azienda. La tua produttività aumenterà in modo esponenziale.

Utilizzare i cicli all’interno delle macro Excel ti consente di eseguire delle azioni ripetitive con un semplice clic. I comandi standard di Excel non consentono di fare nulla di ciò. Ecco perché l’utilizzo delle macro Excel e del VBA diventa fondamentale quando quotidianamente ti ritrovi a ripetere le solite azioni.

Pensa a quante volte ripeti le stesse operazioni a lavoro. Immagino quanta frustrazione nel ripetere gli stessi passaggi. E se potessi ridurre il tutto ad un semplice clic?

Questo è ciò che apprenderai in quest’articolo.
Un ciclo in Excel VBA ti consente di esaminare una serie di oggetti o un intervallo di celle e di analizzarli uno per uno. Il tutto con poche righe di codice.

Se vuoi ottenere il massimo da Excel attraverso il linguaggio VBA, devi imparare a utilizzare i cicli.

In VBA, i cicli ti consentono di svolgere differenti operazioni. Ecco alcuni esempi:

  • Scorrere un intervallo di celle e applicare un colore di riempimento se il contenuto soddisfa una determinata condizione;
  • Scorrere tutti i fogli di lavoro presenti in una cartella di lavoro e, ad esempio, assegnare un nome a ciascun fogli Oppure, ad esempio, applicare o rimuovere la protezione a ciascun foglio.
  • Scorrere tutte le cartelle di lavoro aperte, e salvarle e chiuderle tutte.
  • Scorrere tutti i grafici e applicare un colore di riempimento allo sfondo.
  • Estrarre una porzione di testo da una stringa.
  • Eseguire un ciclo attraverso tutti i valori di un Array.

Questi sono solo alcuni esempi di ciò che puoi fare con i cicli.

In questo articolo passeremo in rassegna i differenti cicli attraverso dei semplici esempi.

Cominciamo subito a rispondere alla prima importante domanda: cosa sono i cicli?

Cosa sono e a cosa servono i cicli nelle macro Excel?

I cicli rappresentano una delle componenti più potenti del VBA Excel. Attraverso i cicli potrai svolgere una quantità incredibile di operazioni in pochi millisecondi.

Operazioni che all’uomo richiederebbero ore possono essere eseguite rapidamente.

Un ciclo rappresenta un modo per eseguire la stessa operazione più volte. Ciò significa eseguire più volte le stesse righe di codice.

Per poter eseguire il codice presente all’interno di un ciclo abbiamo bisogno di fare ricorso alle variabili.

Una variabile è un contenitore all’interno del quale Excel conserva uno specifico valore. Questo valore cambierà ogni volta che il ciclo viene eseguito.

Diamo un’occhiata a un semplice esempio.

Mettiamo a confronto due differenti situazioni. Nel primo caso non faremo ricorso ai cicli mentre nell’esempio successivo vedremo come un ciclo ci permette di risparmiare tempo, codice e tanta fatica.

Supponiamo di voler inserire una sequenza di numeri da 1 a 20 all’interno di un intervallo di celle, ad esempio dalla cella A1 alla cella A20.

macro excel

Come potrai ben notare, è evidente che la seconda soluzione è molto più semplice e rapida. Pensa a quanto tempo potrebbero risparmiare a lavoro se in azienda i lavoratori conoscessero il linguaggio delle macro.

Se analizzi l’esempio con il ciclo potrai notare che è stata inserita una variabile, chiamata i, che ad ogni passaggio del ciclo viene incrementata. La variabile è di tipo Integer ovvero di tipo numerico e ci consente di far riferimento alla riga.

Ogni volta che la variabile cambia valore anche la riga sarà differente.

Ovviamente anche attraverso l’esecuzione del primo codice arriviamo allo stesso risultato ma ciò richiede l’immissione di più righe di codice e di conseguenza Excel impiegherà più tempo nel primo caso rispetto al secondo.

Grazie all’utilizzo della variabile è possibile incrementare considerevolmente il numero di celle in cui vogliamo inserire i valori. Se ad esempio volessimo inserire dei valori all’interno di 1000 celle non dovremmo far altro che modificare il numero: da 20 a 1000.

Questo ci consente, senza dubbio, una maggiore flessibilità. Possiamo infatti decidere il numero di volte in cui il codice deve essere eseguito.

NOTA
nota

Purtroppo non ti renderai conto della differenza nell’esecuzione dei due codici.

L’esecuzione sarà talmente veloce da risultare impercettibile.

La differenza risulta più evidente quando lavori con grandi quantità di dati per cui la prima soluzione, data l’eccessiva lunghezza di codice che sarebbe necessario scrivere, diventa impraticabile.

 

Per poter utilizzare al meglio i cicli VBA Excel, è necessario conoscere i diversi tipi di ciclo e la corretta sintassi.

In questo articolo passerò in rassegna tutti i tipi di cicli VBA di Excel mostrandoti alcuni semplici esempi per ciascuno di esso.

Quando usare i cicli VBA nelle macro Excel

In generale, è necessario fare ricorso ai cicli quando si lavora …

… con un intervallo di celle e si vuol eseguire un’azione singolarmente per ciascuna cella.

… con tutti i fogli di lavoro in una cartella di lavoro (la collezione Worksheets) e si vuol eseguire un’azione con ciascuno di essi.

… con tutte le cartelle di lavoro aperte (la collezione Workbooks) e si vuol fare qualcosa con ciascuna di esse.

… con tutti gli elementi di un Array.

… tutti i grafici presenti in un foglio di lavoro (la collezione ChartObjects) e si vuol eseguire un’azione con ciascuna di essi.

Perché usare i cicli VBA nelle macro Excel

I cicli permettono …

… di ridurre il codice necessario per operazioni ripetitive.

… al programma di decidere quante volte una certa operazione deve ripetersi.

… di validare l’input dei dati.

I tipi di cicli VBA nelle macro Excel

Prima di osservarli singolarmente, iniziamo con una classificazione dei cicli.

Sulla base delle iterazioni possiamo distinguere tra:

  • cicli a iterazione fissa
  • cicli a iterazione indefinita

Nei cicli a iterazione fissa il passo del contatore è regolare ed è possibile determinare il limite finale del contatore.

Nei cicli a iterazione indefinita il passo del contatore NON è regolare, o è possibile determinare il limite finale solo dopo che il ciclo ha iniziato la sua esecuzione.

Sulla base della verifica della condizione possiamo distinguere tra:

  • cicli con verifica dall’alto
  • cicli con verifica dal basso

Nei cicli con verifica dall’alto la condizione ciclica è verificata PRIMA dell’esecuzione dell’operazione.

Nei cicli con verifica dal basso la condizione ciclica è verificata DOPO l’esecuzione dell’operazione.

Le seguenti tabelle ci consentono di osservare i differenti tipi di cicli in base al criterio di classificazione.

excel macro - VBA e cicli

Ora passiamo in rassegna ciascun ciclo.

Il ciclo For Next nelle macro Excel

L’esempio più semplice di ciclo VBA è For … Next.

Il ciclo For … Next è un ciclo a iterazione fissa con verifica dall’alto.

Il ciclo è controllato da una variabile contatore, che inizia da un valore e si ferma su un altro valore.

Le dichiarazioni tra l’istruzione For e l’istruzione Next sono le operazioni che vengono ripetute durante l’esecuzione del ciclo. Vediamo come funziona!

Un semplice esempio di ciclo For Next

Nell’esempio seguente viene utilizzato un ciclo For … Next per sommare i numeri da 1 a 50.

macro excel ciclo for next

All’interno della macro Excel sono presenti due variabili: Totale e Conta.

Inizialmente si procede alla dichiarazione delle variabili attraverso l’istruzione Dim. Dim sta per Dimesion. In questo modo stiamo chiedendo a Excel di creare dei contenitori all’interno della sua memoria in attesa che essi vengano riempiti con dei valori.

Alla variabile Totale viene assegnato il valore iniziale uguale a zero. Questa operazione rappresenta l’assegnazione del valore a una variabile. In altri termini stiamo riempendo il nostro contenitore.

La variabile Conta è il contatore del ciclo. Il valore iniziale della variabile è 1 e viene incrementato di 1 ad ogni passaggio durante l’esecuzione del ciclo.

All’interno del ciclo è presente una sola istruzione: Totale = Totale + Conta.

In questa riga di codice si aggiunge alla variabile Totale il valore della variabile Conta.

Dopo il primo il ciclo la variabile Totale assumerà il valore 1.

creare macro in excel

Dopo il secondo ciclo la variabile Totale assumerà il valore 3.

macro in excel

Dopo il terzo ciclo la variabile Totale assumerà il valore 6 e così via a seguire.

vba excel esempi

Il ciclo termina quando il valore della variabile Conta è uguale a 50.

Infine, al termine del ciclo, viene visualizzata una finestra di messaggio, MsgBox, che mostra il risultato della somma totale dei numeri da 1 a 50.

Il risultato finale sarà uguale a 1275.

vba - macro in excel - finestra excel

Vediamo un ulteriore esempio con l’utilizzo del ciclo For … Next.

Mostrare o nascondere fogli con il ciclo For Next

In questo esempio ti voglio fare vedere come mostrare o nascondere tutti i fogli presenti all’interno di una cartella di lavoro di Excel ad eccezione del primo foglio (questo perché Excel non consente di nascondere tutti i fogli; è necessario visualizzare almeno un foglio).

Si parte dalla dichiarazione delle variabili. La variabile i, di tipo Integer (numerico), è il contatore del ciclo.

La variabile Fogli ha il compito di contenere il risultato del conteggio di tutti i fogli presenti nella cartella di lavoro.

Per fa questo la variabile Fogli sarà uguale al risultato ottenuto attraverso il metodo Count. Voglio farti notare che il conteggio dei fogli parte da 2 per la ragione precedentemente indicata.

In questo esempio viene utilizzata l’istruzione If. Questa istruzione è di tipo condizionale e corrisponde alla funzione SE Excel.

L’istruzione ha lo scopo di verificare che i fogli siano visibili o meno. Nel caso in cui i fogli non siano visibili, li mostra oppure li nasconde nel caso contrario.

macro in excel - ciclo for next - mostrare nascondere fogli

Le scritte di colore verde, all’interno della macro Excel, rappresentano i commenti. Essi aiutano nella comprensione del codice VBA. Excel durante l’esecuzione del codice, ignora i commenti.

Commentare rappresenta un’ottima abitudine per facilitare la lettura del codice.

Applicare e rimuovere la protezione ai fogli di lavoro con il ciclo For Next

Le macro che ti propongo di seguito le utilizzo spesso quando lavoro con cartelle di Excel che contengono tanti fogli di lavoro.

Tengo sempre a portata di mano questi codici perché mi permettono di risparmiare tanto tempo.

In questo primo esempio utilizziamo il ciclo For Next per applicare la protezione a ciascuno dei fogli di lavoro.

Il codice della macro Excel riportato di seguito conta il numero di fogli presenti nella cartella di lavoro attraverso l’utilizzo della variabile Fogli. Per effettuare questo conteggio, alla variabile Fogli è assegnato il codice Worksheets.Count. Questa porzione di codice VBA indica a Excel quante volte è necessario eseguire il ciclo.

Successivamente scorre tutti i fogli di lavoro presenti nella cartella di lavoro attiva e applica la protezione.

macro di excel - ciclo For Next - Applicare e rimuovere la protezione ai fogli di lavoro

È possibile utilizzare lo stesso codice anche per rimuovere la protezione ai fogli di lavoro. È sufficiente cambiare la seguente riga di codice:

macro excel - programmare con excel

Di seguito è riportato il codice della seconda macro Excel che ti consentirà di rimuovere la protezione a tutti i fogli di lavoro:

programmare in excel - vba excel - ciclo for next

Son sicuro che concorderai con me sul fatto che il loro utilizzo è un gran risparmio di tempo!

Ciclo For Next e la parola chiave Step

In questo nuovo esempio di ciclo For Next introduciamo una nuova istruzione: la parola chiave Step.

È possibile utilizzare l’istruzione Step per saltare alcuni valori assunti dal contatore durante l’esecuzione di un ciclo For … Next.

Riprendiamo il primo esempio. Ho riscritto l’esempio precedente (la macro Excel SommaNumeri) aggiungendo l’istruzione Step.

Ciclo For Next - Step - esempi macro excel

Questa istruzione consentirà di saltare i valori del contatore.

La variabile contatore inizia con il valore 1 e a ogni passaggio del ciclo incrementa il proprio valore di 2, quindi assume valori di 3, 5, 7 e così via. In questo modo verranno sommati solo i numeri dispari compresi tra 1 e 50.

L’istruzione Step determina di quanto deve essere incrementato il contatore.

Dopo il primo il ciclo la variabile Totale assumerà il valore 1 come nel primo esempio.

creare macro excel

Dopo il secondo ciclo la variabile Totale assumerà il valore 4 in quanto la variabile contatore è stata incrementata di 3.

macro per excel - variabili vba excel

Dopo il terzo ciclo la variabile Totale assumerà il valore 8 e così via a seguire.

macro excel vba - variabili vba excel

È importante notare che il contatore stavolta non raggiunge il valore 50 ma si ferma a 49.

Durante l’ultimo ciclo la variabile contatore assumerà il valore 49.

inserire macro excel - variabili vba excel

Il risultato finale sarà uguale a 625.

macro vba - finestra vba excel

Analizziamo un altro esempio con l’istruzione Step.

Stavolta il valore associato al passo del contatore sarà 3.

creare una macro - vba excel - ciclo for next - loop excel

Questa macro Excel funziona con il foglio attivo e applica il colore di riempimento verde a ogni terza riga, dalla riga 1 alla riga 50.

come creare una macro - vba excel - ciclo for next - loop excel

Anche in questo caso, come nel precedente, il contatore stavolta non raggiunge il valore 50 ma si ferma a 49.

Inversione del ciclo For Next

Questi due esempi di macro Excel mostrano come l’istruzione Step possa avere un segno negativo. Ciò consente di creare un ciclo inverso. Partendo dal basso verso l’alto.

Inserisci i seguenti codici all’interno di un modulo VBA ed esegui ciascuna macro Excel per visualizzare il risultato.

Inversione del ciclo For Next excel vba

loop vba excel - cicli vba

Uscita dal ciclo For Next: la dichiarazione Exit For

È possibile uscire da un ciclo For … Next prima del suo completamento.

L’utilizzo dell’istruzione Exit For ci consente di uscire in anticipo dal ciclo For … Next.

Infatti, quando VBA rileva questa istruzione, il ciclo termina immediatamente.

È possibile utilizzare questa istruzione nei casi in cui si desidera terminare il ciclo For … Next se, ad esempio, viene soddisfatta una determinata condizione.

Prendiamo in considerazione un ulteriore caso.

Uscita dal ciclo For Next: la dichiarazione Exit For

Supponiamo di avere una serie di numeri nell’intervallo di celle da A1 a A20 e vogliamo applicare un colore di riempimento di colore rosso alle celle che contengono un valore minore di 90.

Utilizziamo il seguente codice:

Uscita dal ciclo For Next: la dichiarazione Exit For

Sub UscitaCicloForNext()

 

Dim i As Integer

For i = 1 To 20

If Cells(i, 1).Value < 90 Then

Cells(i, 1).Interior.Color = vbRed

Else

Exit For

End If

Next i

End Sub

In questo caso, durante l’esecuzione, il ciclo analizza prima il valore contenuto nella cella. Quindi se la condizione viene soddisfatta (la cella contiene un valore minore di 90) la cella sarà colorata di rosso altrimenti, nel caso contrario, il ciclo verrà interrotto.

Il risultato sarà il seguente:

Uscita dal ciclo For Next: la dichiarazione Exit For

Esempio di ciclo For Next nidificato

Finora, tutti gli esempi mostrati usano cicli relativamente semplici. Tuttavia, è possibile trovarsi in situazioni in cui è necessario utilizzare un ciclo For … Next all’interno di un altro ciclo For … Next.

In questo caso parliamo di cicli nidificati.

Trattando di due cicli: avremo un ciclo interno e un ciclo esterno. Nell’esempio seguente viene utilizzato un ciclo For … Next nidificato per inserire numeri casuali all’interno di un intervallo di celle composto da 10 righe e 5 colonne.

Esempio di ciclo For Next nidificato - macro excel

È importante notare che la macro esegue prima il ciclo interno (il ciclo con il contatore chiamato Riga). Successivamente passa all’esecuzione del ciclo esterno (il ciclo con il contatore chiamato Colonna).

La macro eseguirà per ben 50 volte la seguente riga di codice:

Esempio di ciclo For Next nidificato - excel macro - vba excel

Esempio di ciclo For Next triplo

È possibile utilizzare un ciclo triplo per eseguire il ciclo attraverso intervalli bidimensionali su più fogli di lavoro di Excel.

Ti propongo un esempio che potresti adattare facilmente alle tue esigenze.

Immagina di voler eseguire un ciclo per righe e colonne e di ripeterlo per ciascun un foglio all’interno della cartella di lavoro di Excel.

L’esempio usa tre cicli For … Next annidati con tre dimensioni: fogli di lavoro, righe e colonne.

Eseguiremo la stessa operazione inserendo la scritta “Excel per tutti” all’interno delle celle di ciascun foglio di lavoro.

Aggiungi le seguenti righe di codice all’interno di un nuovo modulo all’interno dell’Editor VBA.

macro excel - Esempio di ciclo For Next triplo

Ora manda in esecuzione la tua macro e osserva il risultato.

Questa routine esegue 300 volte (3 * 10 * 10) la seguente istruzione:

codice vba - macro - istruzione excel vba

Ogni volta con una diversa combinazione di valori per le variabili f, r e c.

Macro Excel: esempi vari di utilizzo del ciclo For Next

Prova i seguenti esempi di macro Excel copiando e incollando il codice all’interno di un modulo standard VBA.

Macro Excel - esempi utilizzo ciclo For NextMacro Excel - esempi utilizzo ciclo For NextMacro Excel - esempi utilizzo ciclo For NextMacro Excel - esempi utilizzo ciclo For NextMacro Excel - esempi utilizzo ciclo For Nextprogrammare excel - Macro Excel - esempi utilizzo ciclo For Next

Il risultato dovrebbe essere simile al seguente:

excel macro - cicli vba

Noterai che le date saranno differenti. Ciò dipende dal fatto che la parola Date inserisce il giorno corrente. Successivamente aggiunge i giorni alla data iniziale.

Utilizzare il ciclo For Next per gioco

Ecco un esempio finale che utilizza i cicli For … Next annidati, con l’istruzione Step.

Quest’ultimo esempio l’ho creato per puro gioco. Nonostante ciò, l’obiettivo è mostrarti come utilizzare i cicli nidificati combinandoli con l’istruzione Step.

La macro seguente crea una scacchiera cambiando il colore di riempimento delle celle in modo alternato.

Utilizzare il ciclo For Next

Il contatore del ciclo per riga va da 1 a 10. Mentre l’istruzione condizionale If … Then permette di determinare quale ciclo For … Next utilizzare per le colonne. In particolare attraverso la funzione IsOdd è possibile eseguire cicli differenti sulla base delle righe dispari o pari.

vba WorksheetFunction - cicli vba - loop vba

Per le righe dispari, il contatore Colonna parte da 2.

Per le righe pari, il contatore Colonna parte da 1.

Entrambi i cicli utilizzano lo stesso Step, uguale a 2.

vba cicli - macro excel

Il ciclo For Each nelle macro Excel

Ora osserviamo come funziona il ciclo For Each in VBA.

Il ciclo For Each è un ciclo a iterazione fissa con verifica dall’alto.

A differenza del ciclo For Next, all’interno del ciclo For Each non è presente un contatore.

Ciò significa che per capire il numero di volte per cui un’operazione dovrà ripetersi è necessario basarsi su un altro indicatore.

L’indicatore stavolta sono le cosiddette collezioni o raccolte (collections in inglese). Una collezione consiste di un numero di oggetti dello stesso tipo. Ad esempio, Excel ha una raccolta di tutte le cartelle di lavoro aperte (la collezione Workbooks) e ogni cartella di lavoro ha una raccolta di fogli di lavoro (la collezione Worksheets).

È possibile eseguire il ciclo For Each attraverso un insieme di raccolte.

Ecco alcuni esempi di raccolte in VBA Excel:

  • tutte le cartelle di lavoro aperte (Workbooks)
  • tutti i fogli di lavoro in una cartella di lavoro (Worksheets).
  • tutte le celle in un intervallo di celle selezionate (Range o Cells).
  • tutti i grafici (Charts o ChartObjects) o le forme nella cartella di lavoro (Shapes).

Pertanto utilizzando il ciclo For Each, puoi passare attraverso ciascuno degli oggetti di una collezione ed eseguire alcune azioni su di essi.

Con il ciclo For Each, non è necessario conoscere a priori quanti oggetti ci sono in una collezione.

Il ciclo For Each passa in rassegna ciascun oggetto ed esegue l’azione specificata. Ad esempio, per proteggere tutti i fogli di lavoro di una cartella di lavoro, è possibile utilizzare lo stesso codice a prescindere dal numero di fogli presenti nelle cartelle di lavoro. Il codice sarà valido sia per una cartella di lavoro con 5 fogli sia con una che ne contiene 50.

Ora vediamo alcuni esempi sull’uso del ciclo For Each in Excel.

Quando usare il ciclo For Each

È possibile utilizzare il comando For Each … Next ogni volta che è necessario eseguire il ciclo per ciascun oggetto in una collezione.

Voglio mostrarti subito un esempio.

La seguente macro scorre attraverso ciascun foglio presente nella cartella di lavoro attiva e elimina il foglio di lavoro se è vuoto. All’interno del codice ho inserito i commenti per facilitare la comprensione del codice.

Il ciclo For Each - macro Excel

Nell’esempio, la variabile Foglio è una variabile oggetto che rappresenta ciascun foglio di lavoro della cartella di lavoro.

Il codice viene eseguito attraverso ogni foglio di lavoro e verifica se il foglio è vuoto. Per far questo conta le celle non vuote. Se il conteggio è pari a zero, il foglio è vuoto e viene eliminato.

La seguente istruzione si occupa del conteggio attraverso la funzione CountA:

ciclo For Each - macro Excel

Si ti soffermi un attimo non ti sarà difficile capirne il significato.

Inoltre, è importante inserire la seguente istruzione.

Senza questa istruzione, Excel visualizza un avviso ogni volta che un foglio sta per essere eliminato.

Ciò ti costringe ogni volta ad effettuare un clic sul pulsante Elimina per confermare l’eliminazione del foglio.

Vediamo un altro esempio di utilizzo del ciclo For Each Next. La seguente procedura utilizza un ciclo per nascondere tutti fogli di lavoro presenti nella cartella di lavoro attiva, ad eccezione del foglio attivo.

come usare il ciclo For Each - macro Excel

La procedura Nascondi_Fogli controlla il nome del foglio. Se quest’ultimo è differente dal nome del foglio attivo, il foglio viene nascosto. Si noti che la proprietà Visible del foglio di lavoro non è di tipo booleano.

Questa proprietà può effettivamente assumere uno dei tre valori. Excel fornisce le seguenti tre costanti integrate:

  • xlSheetVisible
  • xlSheetHidden
  • xlSheetVeryHidden

A ciascuna di questa costanti Excel assegna un numero.

  • xlSheetVisible = -1
  • xlSheetHidden = 0
  • xlSheetVeryHidden = 2

nascondere fogli di lavoro - ciclo For Each - excel macro

Se sei curioso esegui passo dopo passo la seguente istruzione (con l’utilizzo del tasto funzione F8) e potrai verificarne il funzionamento.

attivare macro excel vba

Quando la proprietà Visible è uguale a xlSheetVeryHidden allora non è possibile mostrare il foglio con l’utilizzo dei semplici comandi di Excel. All’interno del menu contestuale il comando Scopri non è attivo. È necessario ricorrere al linguaggio VBA.

mostrare nascondere fogli excel

Ciò che viene nascosto deve alla fine essere scoperto, quindi ecco una macro che mostra tutti i fogli di lavoro presenti nella cartella di lavoro attiva:

ciclo for each excel

La macro passa in rassegna ciascun foglio di lavoro (For Each Foglio In) presente all’interno della cartella di lavoro attiva (ActiveWorkbook.Worksheets) e mostra tutti i fogli precedentemente nascosti (Foglio.Visible = xlSheetVisible). Poi prosegue al foglio successivo (Next Foglio) e così per tutti i fogli presenti nella cartella di lavoro.

Vediamo un ulteriore esempio.

La seguente macro consente di rinominare ciascun foglio di lavoro assegnando il nome “Mese” e aggiungendo un numero.

ciclo For Each - macro Excel vba

Se la cartella di lavoro contiene 12 fogli, la macro ci consente di rinominarli rapidamente.

Il risultato sarà come quello mostrato nelle immagini in basso.

rinominare fogli - macro excel vba

Potrai decidere di definire il nome da assegnare a ciascun foglio. Sarà sufficiente sostituire la scritta “Mese” con la scritta desiderata.

Cicli For Each nidificati

Come per il ciclo For Next, anche per il ciclo For Each è possibile creare cicli nidificati.

Ad esempio, è possibile utilizzare un ciclo For Each che scorre per attraverso le celle di ciascun foglio.

Osserviamo il seguente esempio.

La macro denominata ContaCelleSfondoRosso scorre in ciascuna cella nell’intervallo utilizzato (Foglio.UsedRange) di ciascun foglio di lavoro e conteggia il numero di celle che hanno un colore rosso come riempimento di sfondo.

Cicli For Each nidificati - excel macro

La macro può essere modificata per creare un ciclo triplo che, rispetto alla precedente, esegue il codice anche per tutte le cartelle di lavoro eventualmente aperte.

Cicli For Each nidificati - creare macro excel

I cicli Do nelle macro Excel

I cicli Do sono cicli a iterazione indefinita. Ciò significa che non è possibile determinare a priori quando il ciclo terminerà.

Ogni volta che utilizziamo un ciclo For Next o For Each, sappiamo in anticipo quante volte il ciclo verrà eseguito. Ad esempio, potremmo voler eseguire il ciclo per un numero determinato di volte oppure per ogni elemento presente in una collezione: celle (Range), fogli (Worksheets) o cartelle (Workbooks).

Il termine dell’esecuzione dei cicli Do dipende da una determinata condizione.

Una condizione è un’istruzione che può essere valutata VERA o FALSA. Le condizioni vengono solitamente utilizzate con i segni di confronto:

I cicli Do nelle macro Excel

I cicli Do funzionano:

I cicli Do nelle macro Excel

In altre parole, nella maggior parte dei casi, il numero di volte in cui i cicli vengono eseguiti non è rilevante.

Il ciclo Do può essere utilizzato in quattro modi differenti. Spesso questo causa un po’ di confusione nonostante, la differenza tra ciascuno di questi quattro modi sia lieve.

Osserviamo la sintassi del ciclo e scopriamo assieme le quattro combinazioni del ciclo Do.

I cicli Do nelle macro Excel

Possiamo aggiungere una condizione dopo entrambe le righe.

I cicli Do nelle macro Excel

Ciascuna condizione è preceduta dalla parola chiave While o Until. Questo ci offre quattro possibilità:

I cicli Do nelle macro Excel

Partiamo dai cicli Do While.

I cicli Do While nelle macro Excel

Il ciclo Do While Loop

Do While Loop è un ciclo a iterazione indefinita con verifica dall’alto.

A differenza del ciclo For Next, un ciclo Do While continua la sua esecuzione fino a quando incontra a una condizione specificata.

Ipotizziamo di avere dei numeri inseriti all’interno di un intervallo di celle nella colonna A.

Si parte con la selezione della cella A1 e poi si prosegue con la selezione della cella in basso solo se essa soddisfa la condizione definita all’interno della macro ovvero che la cella non sia vuota.

I cicli Do While nelle macro Excel

La macro seguente è una variante della precedente.

La procedura utilizza la cella attiva come punto di partenza (partiamo dalla selezione della cella A1) e poi procede lungo la colonna A, moltiplicando il valore contenuto in ciascuna cella per 2.

Il ciclo continua fino a quando la routine incontra una cella vuota.

I cicli Do While nelle macro Excel - macro excel esempi

La macro può essere eseguita su qualsiasi intervallo di celle. È sufficiente rimuovere la seguente porzione di codice:

vba - codice macro excel

A partire dalla cella attiva , la macro Excel calcolerà il doppio di tutti i valori presenti nelle celle sottostanti.

I cicli Do While nelle macro Excel

Ritengo sia un semplice esempio per capire come funziona il ciclo Do While … Loop.

In entrambi gli esempi di macro, la verifica della condizione viene effettuata dall’alto. Ovvero prima di eseguire il codice.

Prima di passare al prossimo esempio vorrei precisare che i seguenti codici (utilizzati come condizioni) hanno lo stresso significato: “Il valore della cella attiva è diverso da vuoto”.

Excel macro - linguaggio macro vba

Nell’esempio che segue vogliamo inserire nella cella B1 un numero casuale intero compreso tra 1 e 100.

All’inizio della macro viene dichiarata una variabile chiamata Numero alla quale viene assegnato il valore 0.

Questo per poter forzare l’esecuzione della macro e fare in modo che la ripetizione avvenga almeno una volta, effettuando il primo controllo della condizione alla partenza del ciclo. La ripetizione viene eseguita mentre la condizione scritta vicino a While si mantiene VERA.

macro - vba

Si noti che la condizione scritta vicino a While è l’opposto (cioè la negazione booleana) della condizione scritta vicino a Until che affronteremo in un esempio successivo.

I cicli Do While nelle macro Excel - loop Excel

Il ciclo Do Loop While

Do Loop While è un ciclo a iterazione indefinita con verifica dal basso.

A differenza del ciclo Do While Loop, nel ciclo Do Loop While la verifica della condizione viene effettuata dal basso. Ovvero dopo aver eseguito il codice.

Riprendiamo il primo esempio visto in precedenza.

Copia le istruzioni della macro all’interno di un modulo VBA standard e verifica il risultato.

Il ciclo Do Loop While

Il risultato sarà identico solo se le celle contengono dei valori. Nel caso contrario noterai una piccola differenza.

Il ciclo Do Loop While

Nel primo caso (condizione verificata dall’alto) non viene selezionata la cella sottostante a quella attiva e il ciclo viene immediatamente interrotto. Nel secondo caso (condizione verificata dal basso), il ciclo viene eseguito almeno una volta.

Cicli Do While Loop e Do Loop While in sintesi

Nella forma Do While … Loop la condizione viene verificata subito all’inizio. Successivamente vengono eseguite le istruzioni presenti nel ciclo. La condizione determinante viene verificata prima che venga eseguito il ciclo. Se la condizione è True (Vera) VBA ritorna all’inizio del ciclo ed esegue nuovamente le istruzioni.

Nella forma Do … Loop While prima vengono eseguite le istruzioni presenti nel ciclo e poi quando si raggiunge la parola chiave Loop viene verificata la condizione: se la condizione è True (Vera) VBA ritorna all’inizio del ciclo ed esegue nuovamente le istruzioni. La condizione determinante viene verificata alla fine del ciclo.

In sintesi possiamo riassumere quanto espresso attraverso la seguente tabella.

Cicli Do While Loop e Do Loop While in sintesi

Il ciclo Do Until nelle macro Excel

La struttura del ciclo Do … Until è simile alla struttura Do … While.

Le due strutture differiscono nella gestione della condizione da verificare.

Con il ciclo Do …. While il programma continua ad eseguire le istruzioni mentre la condizione rimane Vera.

Con il ciclo Do … Until, il programma esegue il ciclo fino a quando la condizione è Vera.

Il Ciclo Do Until Loop

Nella forma Do Until … Loop la condizione viene verificata subito all’inizio. Successivamente vengono eseguite le istruzioni presenti nel ciclo.

La condizione determinante viene verificata prima che venga eseguito il ciclo.

La macro seguente consente di seleziona la cella sottostante a quella attiva. Il ciclo si interrompe quando la cella attiva è vuota.

Il ciclo Do Until nelle macro Excel

L’esempio seguente è lo stesso presentato per il ciclo Do … While ma ricodificato per utilizzare un ciclo Do … Until:

Il ciclo Do Until nelle macro Excel

Mostrare e nascondere i fogli di lavoro con il ciclo Do Until Loop

Vediamo come utilizzare il ciclo Do Until … Loop per mostrare o nascondere tutti i fogli di lavoro.

La seguente macro mostra tutti i fogli nascosti.

Il ciclo Do Until nelle macro Excel

Attraverso il seguente codice possiamo nascondere tutti i fogli di lavoro ad eccezione del primo.

nascondere i fogli di lavoro - Il ciclo Do Until nelle macro Excel

Applicare o rimuovere la protezione ai fogli di lavoro con il ciclo Do Until Loop

Con qualche semplice modifica è possibile adattare il codice precedente per essere utilizzato per applicare o rimuovere la protezione a tutti i fogli di lavoro.

Applicare la protezione ai fogli di lavoro con il ciclo Do Until Loop - macro excelrimuovere la protezione ai fogli di lavoro con il ciclo Do Until Loop

Il ciclo Do Loop Until

Nella forma Do … Loop Until prima vengono eseguite le istruzioni presenti nel ciclo e poi quando si raggiunge la parola chiave Loop viene verificata la condizione: se la condizione è False, l’esecuzione del codice VBA ritorna all’inizio del ciclo ed esegue nuovamente le istruzioni del ciclo.

La condizione determinante viene verificata alla fine del ciclo. Ecco tre esempi.

Il ciclo Do Loop Until - excel macro vbaIl ciclo Do Loop Until - creare macro excel

Nell’esempio successivo osserviamo l’esecuzione del ciclo attraverso l’utilizzo della seguente funzione …

attivare macro excel - vba excel esempi

Andremo a generare un numero casuale intero compreso tra 1 e 100.

La ripetizione, che genera i numeri e li scrive nella cella A1, si arresta quando il numero generato diventa superiore a 40.

Questa forma riguarda la ripetizione per FALSO o ripetizione post-condizionale, cioè la ripetizione nella quale il controllo viene fatto in coda, dopo aver eseguito le istruzioni del ciclo.

cicli excel vba

Cicli Do Until Loop e Do Loop Until a confronto

Un confronto tra l’esecuzione dei due cicli ci aiuta a cogliere le differenze, anche se minime.

Come nel caso dei cicli Do While Loop e Do Loop While, anche in questo caso il risultato sarà identico solo se le celle contengono dei valori. Nel caso contrario noterai una piccola differenza che in certi casi potrebbe ritornarti utile.

Cicli Do Until Loop e Do Loop Until a confronto

Ipotizziamo di avere un foglio vuoto, senza alcun dato.

Nel primo caso (condizione verificata dall’alto) non viene selezionata la cella sottostante a quella attiva e il ciclo viene immediatamente interrotto. Nel secondo caso (condizione verificata dal basso), il ciclo viene eseguito almeno una volta.

Cicli Do Until Loop e Do Loop Until a confronto

Macro Excel: cicli Do Until Loop e Do Loop Until in sintesi

Macro Excel: cicli Do Until Loop e Do Loop Until in sintesi

Uscita dai cicli Do

Indipendentemente dal ciclo utilizzato e quando non si utilizzano le parole chiave While e Until, come nell’esempio mostrato di seguito, è importante che le istruzioni che vengono ripetute durante l’esecuzione devono essere tali che la condizione a un certo punto possa essere verificata. Nel caso contrario si rischia di entrare in un ciclo infinito e dovrai fare ricorso alla Gestione attività (Task manager) per arrestare Excel in quanto non risponderà più ai comandi.

Uscita dai cicli Do

Per evitare di restare intrappolati in un ciclo infinito è possibile utilizzare la parola chiave Exit Do. Vediamo come riprendendo l’esempio precedente.

Uscita dai cicli Do

Cicli Do a confronto

Infine ecco alcuni esempi conclusivi per capire meglio i cicli Do.

Cicli Do a confronto

La differenza sta nell’enunciato, il risultato NON cambia ma cambiano le parole chiave e la loro collocazione.

Spero troverai questo articolo utile. Intenzionalmente ho inserito degli esempi piuttosto semplici.

Son certo che potrai sfruttare i cicli per automatizzare le tue attività mentre sei a lavoro.

Il tempo che potrai risparmiare è sorprendente e ciò sicuramente stupirà anche il tuo capo e i tuoi colleghi.

Se già utilizzi i cicli a lavoro, lascia un commento e fammi sapere quale ciclo utilizzi o preferisci.

Ti auguro un buon lavoro!

Damiano Causale


Mi chiamo Damiano Causale, istruttore Microsoft certificato, per lavoro aiuto aziende e privati nell'utilizzo di Excel.

Damiano Causale

Your email address will not be published. Required fields are marked

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}