06 – Le MACRO – Il ciclo DO…LOOP

Stampa l'articolo

Oggi vedremo la struttura DO…LOOP, la quale ci consente di ripetere più volte un determinato set di azioni.

Un ciclo nella programmazione VBA ci consente di eseguire più volte un’azione ripetitiva, il ciclo DO…LOOP permette di indicare al suo interno le operazioni che saranno ripetute tante volte fino a quando non si verificherà un evento di uscita dal ciclo.

Sfruttando questo ciclo vedremo come spostarci all’interno di una tabella tramite il comando Offset e colorando le varie celle con l’ormai conosciuta istruzione: Interior.ColorIndex

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

Facciamo partire la macro col comando F8 per vedere passo passo le varie righe di codice, poiché alcuni comandi li abbiamo già visti in precedenza andrò un po’ più spedito.

Con la riga:

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

Andremo per coì dire a “pulire” la nostra tabella Indicando che il colore di riempimento sarà il bianco.

Premiamo F8, la riga:

Range(“C3”).Select

Non farà nient’altro che selezionare la cella C3, definendola come cella attiva che si servirà come punto di partenza per il ciclo DO…LOOP

Premiamo F8 per far avanzare la macro

Ed arriviamo finalmente alla creazione ciclo DO, la sintassi è molto semplice:

DO

…righe di codice con le istruzioni da eseguire

LOOP

L’istruzione DO indicherà ad Excel l’inizio del ciclo, mentre l’istruzione LOOP farà ritornare Excel al punto di inizio del ciclo, quindi torneremo al DO

Tutto ciò che è contenuto nel blocco DO…LOOP verrà ripetuto tante volte fino a quando non si verificherà un evento di uscita dal ciclo.

Premiamo nuovamente F8 e vediamo cosa succede

Con la prima riga diremo di colorare la cella attiva di blu

    ActiveCell.Interior.ColorIndex = 32

Con la seconda faremo spostare la cella attiva di una colonna verso destra, il comando OFFSET compie le stesse operazioni della funzione SCARTO, in descrizione vi lascio il link al video.

    ActiveCell.Offset(0, 1).Select

Di nuovo F8 ed il ciclo si ripete

Bene, ma così facendo capite bene che se facessimo partire la macro con il comando Esegui macro, questa continuerebbe virtualmente all’infinito, in realtà si interromperà al raggiungimento dell’ultima colonna disponibile, dando un errore.

Quindi dove e come scriviamo questo evento per far terminare il ciclo DO?

Nelle righe successive vedremo diverse possibilità.

Il ciclo attuale lo possiamo interrompere semplicemente mettendo un’apice prima del DO ed una prima del comando LOOP

Passiamo oltre, se prima abbiamo selezionato la cella C3 ora selezioniamo la cella C5:

Range(“C5”).Select

Le successive righe eseguiranno le istruzioni viste in precedenza, cioè colorare la cella attiva e far avanzare la cella attiva di una colonna.

Con la riga

If ActiveCell.Column > 12 Then Exit Do

Introdurremo l’evento di controllo, che nel caso specifico andrà a verificare se il numero della colonna della cella attiva supera il valore di 12 che corrisponde alla colonna L, limite oltre il quale non vogliamo andare.

Facciamo continuare il ciclo e quando il valore della cella attiva arriverà al valore di 13 corrispondente alla colonna M Excel uscirà dal ciclo tramite il comando Then Exit Do

F8 e proseguiamo col vedere un’altra istruzione per terminare il ciclo.

Il principio delle prime righe è il medesimo di quelle viste in precedenza, arriviamo alla riga:

        If ActiveCell.Value > 0 Then

La quale controllerà se il valore della cella attiva è maggiore di 0 ed in caso positivo il ciclo proseguirà, non appena arriveremo ad una cella vuota, ovviamente non essendoci alcun valore al suo interno, il valore non potrà essere maggiore di 0, di conseguenza entrerà in azione il comando ELSE, facendoci ancora una volta uscire dal ciclo. Ricordatevi che essendo un controllo IF…THEN…ELSE il tutto deve terminare con l’istruzione END IF

F8 e passiamo ad un altro esempio di istruzione per terminare il ciclo.

In questo caso introduciamo subito dopo il DO la condizione di controllo:

Do While ActiveCell.Value > 0

In sostanza con il comando WHILE diremo ad Excel che fintanto che il valore della cella attiva è maggiore di 0 il ciclo può proseguire, in caso negativo uscirà dal ciclo, questo accadrà ancora una volta non appena arriveremo alla prima cella vuota.

Non vi sembra qualcosa di appena visto? La sostanza è sempre quella solo che prima abbiamo usato le istruzioni IF…THEN…ELSE e qui abbiamo usato WHILE

Proseguiamo, vogliamo vedere un metodo ulteriore? Bene, F8 ed arriviamo all’istruzione:

Do Until ActiveCell = “”

Anche in questo caso introduciamo subito dopo il DO la condizione di controllo, ma questa volta usiamo il comando UNTIL il quale dirà ad Excel di continuare con il ciclo fino a che non si troverà una cella vuota, la quale si identifica con l’apertura e la chiusura delle doppie apici

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

Trovare l’ultimo valore in colonna

Volete trovare l’ultimo valore presente in una colonna? Se a priori non sapete quante celle popolano la colonna o volete un metodo dinamico per conoscere l’ultimo valore, seguite questi passaggi.

Read More »
Torna su