Scopri come creare un grafico Excel attraverso il linguaggio VBA
In questo articolo imparerai come fare un grafico su Excel passo dopo passo con il VBA.
Creare un grafico in 3 semplici passaggi sarà per te un gioco da ragazzi ma vuoi scoprire come farlo utilizzando il linguaggio delle macro?
Imparerai come creare un grafico con Excel semplicemente con un clic all'interno di un intervallo di celle contenente dei dati.

Scoprirai come aggiungere, modificare e posizionare un grafico Excel utilizzando il VBA.
Prima di procedere alla creazione del grafico procediamo al salvataggio del file come Cartella di lavoro con attivazione macro di Excel.

Il file di Excel potrà contenere le macro. Tuttavia, all'apertura del file ti verrà richiesto di attivare le macro Excel.
Come creare un grafico da codice VBA
La creazione di un grafico in Excel aiuta a comunicare a colpo d'occhio una quantità significativa di informazioni.
I grafici permettono di tradurre facilmente i dati numerici in forme facilmente comprensibili.
Per questo motivo le persone tendono ad apprezzare i grafici e li considerano degli strumenti indispensabili.
In Excel puoi procedere alla creazione dei grafici in modalità differenti: il VBA è una di queste.
Attraverso il linguaggio delle macro Excel puoi creare automaticamente grafici.
Attraverso questo articolo ti guiderò passo dopo passo attraverso la creazione di un grafico di Excel tramite VBA.
Alla fine di questo articolo sarai in grado di creare un grafico con un solo clic!!!
Bene, iniziamo!
Innanzitutto, apri l’Editor VBA e inserisci un modulo standard.

Dopo aver assegnato il nome alla macro, la prima fase è quella alla dichiarazione delle variabili. Attraverso la dichiarazione si chiede ad Excel di creare uno spazio in memoria per contenere un oggetto. Questo oggetto sarà il nostro grafico!

La parola "Shape" in inglese significa forma. Stiamo dicendo ad Excel "crea uno spazio nella tua memoria per contenere una forma chiamata Grafico."
Potrai chiamare la forma come preferisci. Il nome non farà alcuna differenza.
Il secondo passaggio sarà la creazione vera e propria.

Questo codice può essere tradotto nel modo seguente:
"Aggiungi una forma, chiamata Grafico, all'interno del foglio di lavoro."

Se andiamo ad eseguire la macro, il risultato sarà il seguente:

Il grafico è vuoto in quanto non è stata specificata l’origine dati ovvero la cella selezionata è vuota.
Se al contrario, selezioniamo una cella contenente dei dati ed eseguiamo il codice, il risultato sarà differente.

Aggiungiamo un’altra porzione di codice.

La dichiarazione If … Else … End If è una istruzione condizionale.
Tradotto avremo:
"Se la cella attiva (ActiveCell.Value) NON è vuota (<> "") allora (Then) aggiungi il grafico (Set Grafico = ActiveSheet.Shapes.AddChart2) altrimenti (Else), nel caso contrario, esci dalla subroutine (Exit Sub) ed esci dall'istruzione If (End If)."

L’aggiunta di questo codice evita di creare un grafico quando la cella selezionata è vuota.
Il passaggio successivo è fare in modo che il grafico, all'interno del foglio di lavoro, sia unico ovvero non si creino ulteriori sovrapposizioni.
Pertanto chiederemo ad Excel di contare tutti i grafici ed eliminarli prima di avere mandato in esecuzione il codice per l’inserimento del nuovo grafico.

Commentiamo il codice.
Dichiariamo un ulteriore variabile (Dim i) come numero intero (As Integer). Successivamente chiediamo ad Excel di contare tutte le forme ovvero i grafici presenti all'interno del foglio di lavoro attivo (ActiveSheet.Shapes.Count) attraverso il ciclo For … Next. Il ciclo andrà a contare i grafici presenti nel foglio e li eliminerà (ActiveSheet.Shapes(i).Delete).

Ora ci preoccuperemo di definire l'altezza, la larghezza e la posizione del grafico attraverso il seguente codice.
Prima però dobbiamo dichiarare delle costanti al di fuori del codice della Sub.

Successivamente i valori devono essere assegnati al grafico presente nel foglio attivo.

L’istruzione With … End With facilita la scrittura e la lettura del codice.
La macro Excel ora apparirà così …

A questo punto andremo a cambiare il colore al grafico.
A dati differenti deve corrispondere un colore delle barre del grafico differente.
Il seguente codice attiverà il grafico (ActiveSheet.ChartObjects(1).Activate) e gli assegnerà un colore sulla base del numero della colonna attiva.

Questo è possibile in quanto ad ogni colore corrisponde un numero che sarà determinato dal numero della colonna della cella selezionata (ActiveCell.Column).


Aggiungere etichette al grafico Excel
Per personalizzare il grafico aggiungeremo le etichette dati attraverso il seguente codice.

Il codice aggiunge le etichette all’estremità esterna delle barre del grafico. Inoltre, imposterà la dimensione dei caratteri a 14 e applicherà il Grassetto.

A questo punto il codice della macro sarà il seguente:

Grafico ed evento VBA Worksheet_SelectionChange
Infine, dobbiamo occuparci della parte più importante.
Occorre fare in modo che il grafico venga creato quando si fa un clic su una cella NON vuota.
Per far questo faremo ricorso ad un evento VBA.
L’evento sarà un’azione che viene eseguita quando accade qualcosa all'interno del foglio di lavoro che contiene i dati. Questo qualcosa sarà appunto un evento.
Nello specifico utilizzeremo l’evento Worksheet_SelectionChange.
Per selezionare l’evento fai doppio clic sul modulo foglio all’interno della finestra Progetto dell'Editor VBA.

Ora seleziona l’evento Worksheet_SelectionChange dal menu a tendina Routine.

L’evento sarà attivato ogni volta che c’è un cambio di selezione. Ma perché accada qualcosa è necessario chiedere ad Excel di compiere un'azione. Pertanto, all'interno dell’evento inserisci il codice seguente.

Non dovresti avere grosse difficolta a capire il significato dell’istruzione. Tuttavia esso può essere tradotto nel modo seguente:
"Se c'è un cambiamento di selezione e la cella (Worksheet_SelectionChange) NON è vuota (Target.Value <> "") esegui la macro (Call CreaGrafico)."
L’istruzione Call è una chiamata alla macro CreaGrafico.

Grafico Excel e gestione dell'errore VBA
Infine, passiamo ora alla gestione dell’errore.
Per evitare la visualizzazione di strani messaggi potrai aggiungere la seguente porzione di codice all'interno dell’evento.
Qualora dovessero verificarsi degli errori, Excel li scavalcherà andando al passaggio successivo!

A questo punto non dovrai far altro che fare un clic su una cella contenente i dati e vedrai comparire immediatamente il grafico relativo all'intervallo di dati selezionato.

Guarda il video e scopri come creare un grafico Excel in modo facile attraverso il linguaggio VBA.
Ora sarai in grado di creare un grafico in Excel utilizzando il VBA!
Spero che questo articolo ti sia utile.
Qualora volessi saperne di più sulle macro Excel, ti suggerisco la lettura dei seguenti articoli:
- Maschere Excel: UserForm e pulsanti
- Fogli Excel: mostra nascondi con VBA
- Range Excel VBA: selezionare celle con VBA
- With VBA Excel: istruzione With in VBA
Buon lavoro!
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!
Istruzioni chiare e perfette
Grazie:)
Ciao Damiano, mi interessava la tua soluzione e d ho iniziato a costruirla finchè, arrivato alla linea
.FullSeriesCollection(1) .datalabels.Format.TextFrame2.TextRangeFont..Size = 14
mi dà un errore di compilazione, cioè non accetta questa istruzione. Sembra che nell.elenco l'istruzione DataLabels non esista...
Ciao Lorenzo,
ho verificato il funzionamento del codice e funziona correttamente. Che versione di Excel stai utilizzando?
In ogni caso ti suggerisco la seguente modifica:
1) RIMUOVI IL SEGUENTE CODICE
.FullSeriesCollection(1).DataLabels.Format.TextFrame2.TextRange.Font.Size = 14
.FullSeriesCollection(1).DataLabels.Format.TextFrame2.TextRange.Font.Bold = msoTrue
2) INSERISCI IL SEGUENTE CODICE (dopo End With)
Dim Etichette As DataLabel
For Each Etichette In ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels
Etichette.Format.TextFrame2.TextRange.Font.Size = 14
Etichette.Format.TextFrame2.TextRange.Font.Bold = msoTrue
Next Etichette
Fammi sapere se funziona;)
Saluti
Damiano