In questo articolo parleremo delle variabili Excel VBA e dei tipi di dati per variabili.
Vedremo perché sono importanti e perché è necessario imparare a usarli correttamente.
Parleremo, inoltre, delle costanti e di un tipo particolare variabili: le variabili oggetto VBA.
Lo scopo principale del linguaggio VBA è manipolare i dati. Attraverso questo linguaggio è possibile memorizzare i dati all’interno della memoria del computer. Alcuni dati possono finire sul disco, altri possono stare negli oggetti, come ad esempio gli intervalli di celle o i fogli di lavoro. Altri ancora vengono memorizzati all’interno di variabili.
In realtà, potresti scrivere le tue macro senza utilizzare la variabile e i tipi di dati. Tuttavia, questa mancanza prima o poi manifesterà i suoi effetti.
Specificare i tipi di dati nelle variabili Excel offre diversi vantaggi durante la scrittura del codice. In particolare, il codice verrà eseguito più velocemente e la memoria verrà allocata in modo più efficiente.
Ecco delle buone ragioni per cui dovresti dedicare un po’ del tuto tempo alla lettura di quest’articolo.
Che cos’è una variabile in Visual Basic Excel
Una variabile Excel in VBA è una posizione di memoria, con nome, usato da un programma nel computer.
La memoria del computer è costituita da aree di archiviazione di piccole dimensioni utilizzate per contenere i valori. Quando si utilizza un valore all’interno di un codice di programmazione, il computer lo mette in una zona di stoccaggio.
Quando ne hai bisogno, il computer la ricerca e la mette a disposizione per l’utilizzo.
Nel mondo della programmazione dei computer, una variabile è un valore per cui si chiede il computer di memorizzarlo temporaneamente nella sua memoria, mentre il programma è in esecuzione.
Per utilizzare alcuni valori nel codice, è necessario prima creare le variabili Excel assegnando un nome.
Assegnare i nomi alle variabili Excel VBA
È importante rendere i nomi delle variabili il più descrittivo possibile.
Sebbene esista molta flessibilità per nominare le variabili, il VBA richiede delle regole precise per i nomi delle variabili Excel. Ecco ciò a cui devi prestare attenzione quando assegni un nome a una variabile Excel.
- Puoi utilizzare lettere, numeri e alcuni caratteri di punteggiatura, ma il primo carattere deve essere una lettera. In altri termini, il nome della variabile NON può iniziare con un numero ma con una lettera.
- Il VBA NON distingue tra lettere maiuscole e minuscole.
- Non è possibile utilizzare i seguenti caratteri in un nome di variabile: #, @, $, %, &, !, punti, spazi o operatori matematici.
- Non è possibile dichiarare due variabili con lo stesso nome all’interno dello stesso ambito.
- Non è possibile utilizzare un nome che fa già riferimento a una funzione, una Sub, un metodo o una costante.
- I nomi delle variabili non possono essere più lunghi di 255 caratteri.
Di solito i programmatori usano il trattino basso "_" (Underscore) per simulare uno spazio o altri accorgimenti per rendere i nomi delle variabili Excel più leggibili. Ecco alcuni esempi:

Inoltre, nel linguaggio VBA sono presenti molte parole riservate che non è possibile utilizzare per i nomi di variabili o nomi di procedure. Ecco alcuni esempi:

Ogni volta che si prova ad utilizzare una di queste parole verrà mostrato un messaggio di errore di compilazione.

Pertanto, il nome della variabile non può essere una parola riservata.
Un altro aspetto da tenere in considerazione è evitare di utilizzare nomi di variabili che corrispondono ai nomi presenti nel modello a oggetti VBA di Excel, come ad esempio:
- Wokbook (Cartella di lavoro)
- Worksheet (Foglio di lavoro)
- Range (Intervallo di celle)
Sebbene questo sia consentito è preferibile non utilizzare questi nomi in quanto aumentano la possibilità di confondersi.
Potrebbe interessarti il seguente articolo: VBA Excel: riferimento agli oggetti VBA
Tipi di variabili VBA Excel
Quando si parla di tipi di dati, ci si riferisce al modo in cui il programma memorizza i dati in memoria.
VBA ha una varietà di tipi di dati. Ecco i più comuni tipi di dati che VBA può gestire.
- Byte - È una variabile di tipo numerico. Può rappresentare un numero intero compreso tra 0 e 255.
- Boolean - Una variabile booleana viene utilizzata per contenere un valore VERO (True) o FALSO (False).
- Integer (Numero intero) - Le variabili di tipo Integer VBA vengono utilizzate per memorizzare numeri interi. Può rappresentare un numero intero compreso tra -32.768 e 32.767.
- Long - È una variabile di tipo numerico con una capacità maggiore. Infatti, una variabile di tipo Long può rappresentare un numero intero compreso tra -2.147.483.648 e 2.147.483.647.
- Single - È una variabile di tipo numerico decimale mobile compreso tra -3,402823E38 e 3,402823E38.
- Double - Una variabile di tipo Double è utilizzata per memorizzare numeri con la virgola. Può rappresentare un numero decimale mobile compreso tra -1,79769313486232D308 e 1,79769313486232D308. È una variabile più precisa di una variabile di tipo Integer.
- Currency - È una variabile di tipo numerico decimale fisso compreso tra -922.337.203.685.477,5808 e 922.337.203.685.477,5808.
- Date - È un tipo di variabile utilizzata per memorizzare Date e ore.
- Object - È un tipo di variabile utilizzata per memorizzare Oggetti.
- String (Stringa) - Le variabili di tipo String vengono utilizzate per memorizzare testo.
- Variant - È un tipo di variabile utilizzata per memorizzare qualsiasi tipo di dato. È il tipo di dati predefinito quando una variabile non viene dichiarata.
Ad alcune variabili è assegnato un simbolo. I simboli mostrati nella seguente tabella possono essere utilizzati per abbreviare le dichiarazioni delle variabili.

Ecco comunque un esempio di dichiarazione:

Le due modalità sono identiche.
Se dichiari una variabile ma non specifichi il tipo di dati, VBA, per impostazione predefinita, assegnerà alla variabile un tipo di dati chiamato Variant.
Il tipo di dati Variant ha una dimensione variabile. Ciò dipende dai dati inseriti all'interno. Potrebbe sembrare la soluzione migliore ma invece finisce per essere la peggiore in termini di prestazioni.
Un altro aspetto importante è che a ciascun tipo di variabile è associato uno spazio occupato in memoria.

Nel linguaggio VBA è possibile non specificare il tipo dati. Ciò significa che il VBA sarà libero di gestire i nostri codici. Tuttavia, questo comporterà un uso della memoria inefficiente e l’esecuzione dei dati sarà più lenta.
Quando si tratta di creare delle piccole applicazioni, questo non rappresenta un problema. Nel caso di applicazioni più grandi o complesse, è importante utilizzare sempre il tipo giusto di variabile. Ciò consente di risparmiare memoria e permette al codice di essere eseguito più velocemente. Inoltre, rende più facile individuare gli errori.
VBA non richiede che vengano dichiarate le variabili. Tuttavia, questa è sicuramente una buona pratica.
In generale, ti suggerisco di scegliere il tipo di dati che utilizza il minor numero di byte e che può gestire tutti i dati che desideri memorizzare nella variabile. In altri termini, utilizza solo lo spazio sufficiente in memoria per contenere ciò che viene inserito nella variabile.
Se utilizzi i dati in modo inappropriato, Excel mostrerà un messaggio di errore.
Ad esempio, si memorizzi il conteggio dei valori presenti in un intervallo di celle in una variabile dichiarata con un tipo di dati Byte e il conteggio supera 255, si verificherà un errore di Overflow come mostrato di seguito.

Che cos’è la dichiarazione di una variabile e come farla
Dopo aver visto cosa sono le variabili e quali sono i tipi di dati, andiamo a scoprire come dichiarare una variabile in VBA Excel. Ogni volta che dichiari una variabile stai indicando al VBA il tipo di dati della variabile e stai dando l’indicazione di predisporre uno spazio da riservare in memoria prima dell’archiviazione dei dati.
È sempre una buona pratica dichiarare le variabili.
Il modo più comune per dichiarare una variabile è usare l'istruzione Dim VBA Excel.
Dim, è un vecchio termine di programmazione che sta per dimensione. In altri termini significa che stai destinando una parte della memoria per una particolare variabile.

Ecco alcuni esempi di variabili dichiarate:

Le prime quattro variabili sono dichiarate con un tipo di dati specifico. L'ultima variabile, i, non è dichiarata come un tipo di dati specifico, quindi è trattata come Variant.
Ogni volta che decidi di non dichiarare una variabile, VBA assegna il tipo di dati predefinito: Variant. Questo tipo di dati richiede più memoria e più tempo nell’esecuzione dei processi.
I dati memorizzati come Variant possono contenere qualsiasi tipo di dato.
È importante non lasciar gestire i tipi di dati ad Excel. Sebbene questa possa sembrarti una facile via d'uscita, ricorda che ciò va a discapito della velocità e della memoria.
Dichiarare le variabili rende le macro più veloci e consente di utilizzare la memoria in modo più efficiente.
Esiste un modo per costringere a dichiarare tutte le variabili.
Inserire due parole all’interno di un modulo VBA prima di inserire il codice di una macro.

Quando è presente questa affermazione, non sarà possibile eseguire il codice quando sono presenti delle variabili non dichiarate. Essa richiede di esplicitare le variabili ovvero di dichiararle.
L’istruzione Option Explicit va inserita, una sola volta, all'inizio del modulo e si applica solo al modulo in cui è stata inserita. Se sono presenti più moduli dovrai inserirla in ciascuno di essi.

Ogni volta che usi Option Explicit all'inizio del modulo, Excel mostrerà un messaggio di errore quando non dichiari una variabile o quando il nome della variabile non è scritto correttamente.

Se non usi Option Explicit potresti indicare un nome errato a una variabile. In questo caso, Excel interpreterà il nome della variabile errata come diverso e questo probabilmente causerà risultati errati all’interno della tua macro. Inoltre, un nome errato non è semplice da individuare.
Per fare in modo che l'istruzione Option Explicit venga inserita automaticamente ogni volta inserisci un nuovo modulo VBA, è possibile modificare le opzioni dell’Editor VB.
Fai un clic sul menu Strumenti e successivamente su Opzioni.
Excel mostrerà la finestra di dialogo Opzioni.
A questo punto applica il segno di spunta su Dichiarazione di variabili obbligatoria.

La dichiarazione delle variabili consente di sfruttare l’auto completamento. Sarà sufficiente digitare i primi due o tre caratteri del nome della variabile e premere la combinazione di tasti Ctrl + Spazio. In questo modo Excel completerà la voce per te o mostrerà un elenco di voci corrispondenti alla tua scelta.

Oltre a Dim, il linguaggio VBA utilizza altre tre parole chiave per dichiarare le variabili:
- Static
- Public
- Private
Queste modalità verranno spiegate in seguito in questo articolo.
Come assegnare un valore a una variabile Excel
Ora che conosci i vantaggi di dichiarare le variabili, vediamo come fare per assegnare un valore a una variabile Excel.
Questa operazione viene eseguita tramite le istruzioni LET e SET.
Se ad esempio volessimo assegnare il valore 1 alla variabile "i", l'istruzione sarebbe la seguente:

Ciò che stiamo facendo è "lasciare" che la variabile "i" contenga un numero.
Nella pratica, l'uso della parola chiave LET è facoltativo. Per questa ragione la maggior parte dei programmatori sceglie di non includerla nel proprio codice.
Pertanto, il codice diventa così:

Il risultato sarà identico.
Per assegnare un valore a una variabile si utilizza il segno di uguale (=).
Ecco alcuni esempi di assegnazione di valori alle variabili in VBA.

Probabilmente sei abituato ad usare il segno di uguale come un simbolo matematico per l'uguaglianza. Tuttavia, come avrai notato, VBA usa il segno di uguale come operatore di assegnazione.
Inoltre, talvolta è possibile visualizzare i nomi delle variabili su entrambi i lati: a sinistra e a destra del segno di uguale.

In Excel VBA è possibile anche assegnare a una variabile il valore di una cella. Ecco un esempio:

Ambito e vita di una variabile in VBA: variabili Static, Public e Private
Prima di parlare delle altre modalità di dichiarazione delle variabili, è necessario introdurre i concetti di ambito e vita di una variabile.
Che cos’è l’ambito delle variabili in VBA
In VBA, l’ambito di una variabile determina quali moduli e quali procedure (Sub o Function) possono utilizzare una variabile.
Gli ambiti possono essere sono i seguenti:
- Solo procedura
- Solo modulo
- Tutte le procedure in tutti i moduli
Ambito variabili solo per procedura
L’ambito di applicazione più basso per una variabile è a livello di procedura.
Una procedura può essere di tipo Sub o Function.
Le variabili dichiarate a livello di procedura possono essere utilizzate solo nella procedura in cui sono state dichiarate. Quando termina la procedura, la variabile viene cancellata e Excel libera la sua memoria.
Se si esegue nuovamente la procedura, la variabile ritorna in vita, ma il suo valore precedente viene perso.
Questo tipo di ambito può essere dichiarato utilizzando l’istruzione Dim o Static nella procedura che usa la variabile. Occorre posizionare le istruzioni Dim immediatamente dopo l'istruzione Sub o Function e prima del codice della procedura.
L'esempio seguente mostra alcune variabili dichiarate, con ambito solo per procedura, usando la dichiarazione Dim:

È importante notare che l'ultima istruzione Dim nell'esempio non specifica il tipo di dati per la variabile Valore ma dichiara solo la variabile. L’effetto è che la variabile Valore è di tipo Variant.
È possibile dichiarare più variabili con una singola istruzione Dim, come nell'esempio seguente:

È importante notare che VBA non consente di dichiarare un gruppo di variabili con un particolare tipo di dati separando le variabili con virgole. Infatti, la seguente dichiarazione, sebbene valida, non dichiara tutte le variabili come Integer:

In questo esempio, solo z è dichiarato come Integer; le altre variabili sono di tipo Variant.
Se dichiari una variabile con ambito di sola procedura, puoi usare lo stesso nome di variabile all’interno dello stesso modulo, ma ogni istanza della variabile è unica per la sua stessa procedura. In generale, le variabili dichiarate al livello di procedura rappresentano la modalità più efficiente in quanto VBA libera la memoria utilizzata quando termina la procedura.
Partiamo da questi esempi di macro chiamate rispettivamente ContaIngressi1 e ContaIngressi2. Gli stessi esempi verranno ripresi in seguito, con le opportune modifiche, per capire le differenze.
Nell’esempio, le due macro (ContaIngressi1 e ContaIngressi2) consentono di conteggiare il numero di volte in cui viene eseguita la procedura e visualizzare il risultato attraverso una finestra di messaggio.

Noterai che al termine di ciascuna esecuzione il valore della variabile Contatore verrà ripristinato.
Il risultato sarà sempre uguale a uno.
Ambito variabili Excel solo modulo
A volte potrebbe essere necessario avere una variabile disponibile per tutte le procedure in un modulo.
In questo caso occorre dichiarare la variabile, usando la parola chiave Dim o Private, al di fuori delle procedure e prima del primo modulo Sub o Function.
Ecco un esempio:

Nell’esempio, le due macro (ContaIngressi1 e ContaIngressi2) consentono di conteggiare il numero di volte in cui viene eseguita la procedura e visualizzare il risultato attraverso una finestra di messaggio.
La variabile Contatore, comune ad entrambe le Sub, sarà disponibile per tutte le procedure ma solo per il modulo in cui è inserita.
La variabile Contatore verrà incrementata ogni volta che si eseguono entrambi le procedure.
Ciò significa che il valore della variabile può essere utilizzato da qualsiasi procedura all'interno del modulo mantenendo il valore da una procedura all'altra.
Il risultato ottenuto sarà un numero progressivo.
Ambito variabili pubbliche
Una variabile pubblica è un tipo di variabile disponibile per tutte le procedure in tutti i moduli VBA presenti all’interno di una cartella di lavoro.
Per dichiarare una variabile pubblica si utilizza la parola chiave Public. La dichiarazione va inserita prima del nome della Sub o Function all’interno di un modulo.
Ecco un esempio:

Come già visto nell’esempio precedente le due macro conteggeranno il numero di volte in cui verrà eseguita ciascuna procedura visualizzando il risultato attraverso una finestra di messaggio.
La variabile pubblica Contatore verrà incrementata ogni volta che si eseguono entrambi le procedure.
Il suo valore verrà incrementato sia dall’esecuzione della macro ContaIngressi1 che della macro ContaIngressi2 ma anche quando proverai ad eseguire la macro ContaIngressi3 presente nel Modulo2.
La differenza rispetto all’esempio precedente è che, in questo caso, la variabile Contatore sarà disponibile anche per gli altri moduli all’interno di una cartella di lavoro.

Ambito variabili statiche
Ciò che di solito accade, al termine di una procedura, è che tutte le variabili della procedura vengono ripristinate. Tuttavia esistono alcune variabili che mantengono il valore anche quando la procedura finisce. È questo il caso delle variabili statiche.
La variabile statica viene dichiarata a livello di procedura. Ovvero la variabile non è disponibile per altre procedure ma solo per quella in cui è stata inserita.
Per dichiarare le variabili Excel statiche si utilizza la parola chiave Static.
Ecco un esempio di utilizzo di una variabile statica.
Riprendiamo l’esempio precedente.

Nell’esempio sono presenti le due macro viste in precedenza: ContaIngressi1 e ContaIngressi2.
Rispetto all’esempio precedente, la variabile Contatore presente nella Sub ContaIngressi1 è differente dalla variabile Contatore presente nella Sub ContaIngressi2.
Anche in questo caso la variabile statica Contatore verrà incrementata ogni volta che si esegue la procedura. Tuttavia, nonostante abbiamo in comune lo stesso nome, l’incremento della variabile sarà differente.
Al termine di ciascuna procedura il valore assegnato alla variabile Contatore non verrà ripristinato. Per ripristinare il suo valore è necessario chiudere e riaprire la cartella di lavoro.
Vita delle variabili Excel in VBA
L’ambito di una variabile determina:
- dove può essere usata quella variabile;
- definisce anche in quali circostanze la variabile viene rimossa dalla memoria.
Per eliminare dalla memoria tutte le variabili Excel è possibile fare clic sul pulsante Ripristina sulla barra degli strumenti standard nell’Editor VB.

Le variabili statiche, le variabili pubbliche e quelle a livello del modulo mantengono tutti i loro valori durante l’esecuzione del codice. Per questo motivo è necessario utilizzare il pulsante Ripristina.
Solo le variabili Excel a livello di procedura verranno rimosse dalla memoria quando il codice macro ha completato l'esecuzione.
Che cos’è una variabile oggetto VBA
Le variabili oggetto VBA consentono di memorizzare i riferimenti agli oggetti in memoria.
Gli oggetti comuni in Excel VBA sono l'oggetto Workbook (Cartella di lavoro), l'oggetto Worksheet (Foglio di lavoro) e l'oggetto Range (Intervallo di celle).
Di seguito ecco alcuni esempi di dichiarazione di variabili oggetto.

Per assegnare un valore a una variabile oggetto in VBA si utilizza l'istruzione SET.

Ecco un esempio.

Tuttavia, talvolta capita di dimenticare di utilizzare l'istruzione SET quando si assegnano valori alle variabili oggetto.

Se non utilizzi l’istruzione SET quando richiesta, VBA mostrerà il seguente messaggio di errore.

Pertanto ricorda sempre di utilizzare l’istruzione SET quando utilizzi una variabile oggetto in VBA Excel.
Come utilizzare le costanti in VBA
Come di solito avviene, il valore di una variabile cambia mentre la procedura è esecuzione. Ragione per cui si chiama variabile. Talvolta, è necessario fare riferimento un valore o una stringa che non cambia mai. In questo caso, si fa ricorso alle costanti.
Per dichiarare una costante in VBA si utilizza la parola chiave Const.
Ecco alcuni esempi.

Come potrai notare gli esempi, durante la dichiarazione della costante viene assegnato il valore.
L'utilizzo delle costanti al posto di valori rappresenta un'ottima pratica programmazione quando è necessario fare riferimento a uno specifico valore che si ripete all’interno di una procedura.
In tutti questi casi è preferibile indicare il nome piuttosto che il valore. Ciò rende il codice più leggibile e più facile da modificare. Se un determinato valore cambia allora è sufficiente fare la modifica in un solo punto piuttosto che in più parti della procedura.
Così come per le variabili Excel anche le costanti hanno un ambito.
Per rendere una costante disponibile …
… all'interno di una singola procedura: dichiara la costante dopo l'istruzione Sub o Function della procedura.

… per tutte le procedure all’interno di un modulo: dichiara la costante nella sezione Dichiarazioni del modulo.

… per tutti i moduli nella cartella di lavoro: utilizza la parola chiave Public e dichiara la costante nella sezione Dichiarazioni di qualsiasi modulo.

A differenza di una variabile, il valore di una costante non varia. Qualsiasi tentativo di cambiare il valore di una costante in una routine VBA, genera un errore.
Sembra scontato ma, se la tua esigenza è quella di utilizzare un valore che cambia mentre il codice è in esecuzione allora utilizza una variabile.
Spero l’articolo ti sia utile. Se ti va lascia pure un commento.
Buon lavoro!
Potrebbero interessarti anche i seguenti articoli:
- Macro Excel: cos’è e a cosa serve
- Macro Excel in 6 semplici passaggi
- Attivare macro Excel VBA
- With VBA Excel: istruzione With in VBA
- Range Excel VBA: selezionare celle con VBA
- VBA Excel: come padroneggiare le macro
- Macro Excel: usare i cicli VBA in azienda
- Maschere Excel: UserForm e pulsanti
- ComboBox Excel VBA: uso casella combinata
- ListBox VBA Excel: casella di riepilogo
Vuoi imparare a utilizzare il linguaggio Excel VBA?
Basta con i lavori noiosi e ripetitivi! Grazie al VBA puoi far lavorare Excel al tuo posto!
Ho registrato per te un corso interamente dedicato alle Macro e al VBA.
Attraverso degli esempi pratici, ti introdurrò, al mondo delle Macro di Excel illustrandoti tutto il potenziale per automatizzare le tue attività di lavoro quotidiane.
Cosa aspetti?
Sfrutta tutto il potenziale di Excel con il corso Macro e VBA!