04 – Le MACRO – Il ciclo FOR

Un ciclo nella programmazione VBA ci consente di eseguire per più volte un’azione ripetitiva, il ciclo FOR ci permette di indicare un valore di inizio ed un valore di fine e le operazioni contenute all’interno di esso saranno ripetute tante volte quanto è la differenza tra i due estremi.

Sfruttando questo ciclo vedremo come colorare l’intera tabellina, tramite il comando Interior.Color = RGB, visto in precedenza.

Muovendoci una cella dopo l’altra, dando semplicemente le coordinate del punto di partenza, ci sposteremo in tutte le celle della prima riga, per poi ripetere l’operazione per tutte le celle della seconda riga e così via fino a riempire l’intera tabella.

In questo modo avremo l’opportunità di nidificare un ciclo FOR all’interno di un altro, uno lo utilizzeremo per muoverci nelle righe ed uno per le colonne.

Nell’area di sviluppo ho creato una nuova macro che ho chiamato COLORA_CELLE

Facciamo partire la macro col comando F8 per vedere passo passo le varie righe di codice

Nella prima riga tramite il comando Dim andiamo a dichiarare le variabili in gioco, diciamo che questo non è un passaggio obbligatorio, ma con macro più estese è buona norma prendere l’abitudine di indicare il tipo di variabili che si vuole utilizzare.

Con il codice:

Dim Riga, Col, R, G, B As Integer

Definiremo che le variabili denominate Riga, Col, R, G, B sono dei valori Integer, ciò significa che possono assumere un valore numerico compreso fra -32.768 e + 32.767, nello specifico:

Riga sarà il contatore delle righe per il ciclo FOR

Col sarà il contatore delle colonne sempre per il ciclo FOR

Mentre le variabili R,G,B rappresenteranno le intensità di colore, rispettivamente per il rosso, verde e blu

La riga successiva:

Range(“C3:L12”).Interior.ColorIndex = 2

Indicheremo di riempire di colore bianco la tabella, questo passo lo facciamo solamente perché nel caso in cui ci sia qualche cella con un colore differente, Excel uniformerà il colore dell’intera tabella al bianco.

Premiamo F8

Nelle 3 righe successive andremo a definire i valori delle variabili R, G e B

Premiamo F8 per far avanzare la macro

Ed arriviamo finalmente alla creazione del primo ciclo FOR, prima di vedere la riga di comando cerchiamo di capire come è strutturato questo ciclo, la sintassi è:

For X Inizio To Fine

…righe di codice con le istruzioni da eseguire

Next X

“X” è la nostra variabile, nel caso specifico quella che prima abbiamo definito col nome Riga e Col

“Inizio” e “Fine” sono rappresentati da valori numerici e indicano al ciclo da quale valore partire a quale valore arrivare

Il comando Next farà incrementare di una unità la variabile “X”

Tutto ciò che è contenuto nel blocco For … Next verrà ripetuto tante volte fino a quando il contatore, o la variabile “X” che dir si voglia,  ha raggiunto il valore indicato dal limite “Fine”

 

Quindi l’istruzione:

For Riga = 3 To 12  

Dirà che la variabile Riga partirà dal valore 3 per arrivare al valore di 12, ho volutamente messo questi numeri perché come potete vedere il primo valore contenuto nella tabella si trova nella cella C3 terza colonna e terza riga, di conseguenza ho assegnato il valore 3 come valore di partenza.

Premiamo F8 ed arriviamo al ciclo successivo, la sintassi ovviamente è simile a quella precedente:

For Col = 3 To 12  

solo che in questo caso useremo la variabile Col

Questo comando dirà che la variabile Col partirà dal valore 3 per arrivare al valore di 12, anche in questo caso ho volutamente messo questi numeri perché come potete vedere il primo valore contenuto nella tabella si trova nella cella C3 ubicato appunto alla terza colonna.

Premiamo F8 ed arriviamo alle istruzioni da ripetere all’interno del blocco For … Next

L’istruzione:

Cells(Riga, Col).Interior.Color = RGB(R, G, B)

Dirà di colorare la cella corrispondente all’incrocio della riga numero 3 con la colonna numero 3 del colore composto dall’intensità di 200 di rosso, 2 di verde ed 1 di blu, che non sono nient’altro che i valori che abbiamo assegnato in precedenza alle variabili R, G, B

Premiamo F8 e vediamo che la cella C3 si è colorata di un rosso scuro

Passiamo oltre, il codice:

Application.Wait (Now() + TimeValue(“00:00:01”))

Inserisce un tempo di attesa pari ad 1 secondo dopo aver colorato la cella, il perché ho inserito questa riga di codice lo capirete una volta che faremo partire la macro con il comando F5, vi anticipo che serve per rendere più coreografica l’esecuzione di queste istruzioni ripetitive.

Le tre istruzioni successive:

    R = R – 1

    G = G + 2

    B = B + 1

Vanno nel primo caso a sottrarre una unità alla variabile R, che partendo da un valore di 200 diventerà 199, nel secondo sommeremo 2 unità alla variabile G, essendo il valore iniziale uguale a 2 diventerà 4 e nel terzo caso la variabile B passerà da 1 a 2.

F8 ed eccoci arrivati all’istruzione:

Next Col

La quale farà avanzare di una unità il ciclo della variabile Col

Premendo ulteriormente il tasto F8 ritorneremo sull’istruzione:

Cells(Riga, Col).Interior.Color = RGB(R, G, B)

Se volessimo vedere i valori reali delle varie variabili possiamo seguire un paio di strade, portandoci nella scheda Visualizza, clicchiamo su Finestra Variabili locali,

si aprirà in basso a destra una finestra in cui verranno elencate tutte le variabili in gioco con i relativi valori,

un secondo metodo velocissimo sarà quello di passare semplicemente col cursore del mouse sulla variabile ed apparirà il suo valore.

Ma continuiamo a far ciclare la macro premendo sempre F8, vediamo che piano piano si colorano le celle della riga 3 che incrociano la colonna D, E, F e via dicendo.

Arriviamo fino alla cella L3 e con la pressione successiva del tasto F8 passeremo all’istruzione:

Next Riga

La quale farà aumentare di una unità il valore della variabile Riga portandolo da 3 a 4, questo significherà che come riferimento ci porteremo alla riga 4, preparandoci a colorare la cella C4

Ora che abbiamo compreso il funzionamento dei due cicli FOR nidificati tra loro non ci resta che far partire l’intera macro con il comando F5 o premere sul tasto verde “esegui Sub” e vedere cosa succede.

Una cella dopo l’altra verrà colorata con una pausa di 1 secondo e poiché i valori R,G,B che definiscono il colore di riempimento variano ad ogni ciclo la tabella risulterà sfumata, non trovate carino il risultato?

Nel video qui sotto trovate tutti i passaggi appena illustrati, buona visione.

Condividi il post

Facebook
Twitter
LinkedIn
Email
WhatsApp

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Articoli correlati

Tips & Tricks

La formattazione condizionale – (parte5)

La Formattazione condizionale ci permette di mettere in risalto singole celle, righe o colonne applicando diversi formati e stili al foglio ogni qualvolta che i dati presenti soddisfano una o più condizioni. Vedremo come usare la formattazione condizionale abbinandola alle caselle di controllo.

Read More »
Torna su