Macro e Vba su Excel, da principianti a ninja

Avete sentito parlare delle Macro Excel e di VBA ma non vi siete mai approcciati a questa parte avanzata del programma? Sapevate che oltre alle tipiche funzioni standard è possibile personalizzare il comportamento dei vostri fogli di calcolo e implementare dei veri e propri programmi?

Lascia che ti spieghi uno dei metodi più potenti, ma a volte anche più difficile di usare Excel, un metodo che sicuramente vi offrirà infinite personalizzazioni ma che, una volta imparato, non vorrai tornare sicuramente indietro.

Introduzione

Se lavori regolarmente con programmi di elaborazione testi, basi di dati o applicazioni per l’elaborazione di fogli di calcolo, sai quanto può essere noioso inserire le stesse direttive ed eseguire gli stessi comandi più e più volte.

Sequenze complesse di operazione ripetute possono mettere a dura prova la tua pazienza. Le macro registrano una sequenza di comandi in modo che possano essere eseguite automaticamente dall’utente che lavora sui fogli di calcolo.

Anche se le macro sono scritte in un linguaggio di programmazione (tipicamente VBA), la conoscenza della programmazione in genere è necessaria in parte, poiché molti programmi come Excel, possono registrare macro semplici e fornire assistenza nello sviluppo. Sia nei fogli Excel che nel pacchetto Office in generale, le macro, sono una delle funzionalità più importanti.

Cosa sono le Macro

Microsoft Excel è la soluzione più richiesta per l’elaborazione, l’analisi e la presentazione dei dati. Utilizzando i fogli di calcolo Excel, che rappresentano una componente chiave della Suite Microsoft, gli utenti hanno lavorato con questo programma per anni alla creazione di budget, calendari aziendali e una lunga serie di altri progetti. Infatti Excel viene anche utilizzato nel mondo degli affari in molteplici compiti come progetti, il calcolo del monte ore lavorative, la stesura di budget, la rappresentazione grafica di vendite, profitti o perdite.

Chiunque abbia familiarità con il programma impara ad apprezzare le varie funzioni, ma la maggior parte delle persone sviluppa rapidamente una riluttanza a ripetere costantemente attività di routine o operazioni ripetitive che non possono essere facilmente eseguite utilizzando l’interfaccia utente standard visibile nel pannello del foglio di calcolo.

Non c’è da meravigliarsi dunque che la possibilità di creare macro in Excel sia una delle funzioni più utilizzate su Excel. Per tal fine nel software è disponibile un ambiente di programmazione (IDE), studiato per programmare in VBA (Visual Basic), che incrementa in maniera significativa le funzionalità generali e l’ampio spazio di azione che hanno i software del pacchetto Office. E’ possibile, dunque, implementare algoritmi anche complessi, in un programma che generalmente è utilizzato tenendo conto solo delle funzioni standard, ma che in realtà ha una flessibilità che permette di svolgere molteplici compiti.

Vi mostro l’Ide dove viene scritto il codice Vba e dunque le macro.

ide Visual Basic

VBA è il linguaggio di programmazione di Excel e di altri programmi del pacchetto Office come Word. Impararlo è di fondamentale importanza se si vogliono automatizzare i processi e creare veri e propri programmi con i fogli di calcolo.

Attivare le Macro su Excel

Ci sono due modi di implementare le macro su Excel:

  • Le macro possono essere registrate. In questo modo verrà prodotto un codice VBA in automatico ( che rappresenta le azioni compiute dalla nostra macro) che successivamente potrà essere modificato.
  • Le macro possono essere implementate direttamente in VBA dall’utente.

Per attivare il menu Excel dedicato alle macro procede come segue:

  • Cliccate con tasto destro sul menù e selezionate Personalizza barra multifunzione.
Personalizza barra multifunzione
  • Selezionate la voce Sviluppo. Vi apparirà un nuovo menù su Excel.
Menù Sviluppo
  • Adesso per scrivere una Macro con codice Vba vi basterà selezionare l’icona Visual Basic.
Icona per creare Macro

Ti apparirà l’IDE visto precedentemente, cioè un ambiente di sviluppo dove implementare in Visual Basic le macro che desiderate.

Cos’è VBA

Abbiamo detto che VBA è il linguaggio di programmazione di Excel. In sostanza è qualcosa che va oltre le solite funzioni, anzi, con VBA abbiamo la possibilità di creare funzioni personalizzate da usare all’interno dei nostri fogli di calcolo e cosa più importante, abbiamo la possibilità automatizzare le operazioni che eseguiamo di frequente, in modo tale da eseguirle in maniera veloce quando ne abbiamo necessità.

Quindi se, per esempio, nel vostro foglio di calcolo vi trovate una lista di nomi scritti totalmente in minuscolo e volete trasformarli in maiuscolo, potete utilizzare formule conosciute come MAIUSCMINUSC e MAIUSC.INIZ. Ma se non sapevate la loro esistenza, e siete abili programmatori VBA, potrete crearvi delle funzioni ad hoc che fanno per voi quello che desiderate e potete utilizzarle in maniera ricorrente. Dunque se, per esempio, chiamate la vostra funzione VBA col nome di MAIUSCOLO, allora potrete richiamarla in qualche cella come  =MAIUSCOLO ( A1 ).

vba-maiuscolo
Un esempio sulla funzione creata

Guida a VBA

Il concetto di variabile

Quando si parla di programmazione, generalmente si comincia col parlare delle variabili. Le variabili, così come altri costrutti o meccanismi, sono componenti utilizzati in tutti i linguaggi.

Dunque cosa sono le variabili? Le variabili sono aree di memoria che vengono adibite a contenere informazioni. Quindi immaginate un’area di memoria in cui può essere memorizzato un numero intero o con la virgola, una parola, una data. Ogni volta che vogliamo, possiamo memorizzare un nuovo dato su quella piccola porzione di memoria a cui viene dato un nome. Quella piccola porzione di memoria viene dunque chiamata variabile.

Un esempio di Ram
Un esempio di variabile sulla RAM

Come si vede nell’esempio, data la RAM del nostro computer (la memoria in cui vengono memorizzate le informazioni), istanziamo (creiamo) una variabile che chiameremo A e gli diamo il valore 33. Dunque questa area di memoria dal nome A sarà conservata per tutta la durata del nostro programma. La cosa importante è che possiamo cambiarne il contenuto ogni qualvolta lo vogliamo. Dunque, al posto di 33 per esempio possiamo memorizzare 54.

La variabile è un’aria di memoria in cui viene memorizzato un valore che può cambiare nel tempo. A quest’area di memoria viene dato un nome.

Come vengono istanziate le variabili in VBA?

Innanzitutto dobbiamo definire il tipo di variabile, che possono essere:

Integer: sono le variabili di tipo intero, aree di memoria che possono contenere numeri che non hanno la virgola come : 1, 3, 40, 25 ….

Dim a As Integer
a = 3

Nell’esempio un variabile di nome a, viene dimensionata come tipo intero e nella riga successiva gli viene dato il valore 3.

String: sono le variabili di tipo stringa, quindi aree di memoria che conterranno parole, frasi e lettere. In queste aree di memoria possono starci anche numeri e caratteri speciali, ma i numeri non vengono considerati numeri in quanto tale ( e quindi dati sommabili, sottraibili, moltiplicabili), ma come testi veri e propri. I valori di queste variabili, per essere assegnati, devono stare tra due virgolette “…”.

Es: “Questo sito e’ veramente utile” oppure “Ci sono 5 polli nel pollario” oppure “5”.

Come vedete il numero 5 è presente nelle stringhe, ma non è un numero sommabile, perché considerato testo, quindi per diventare un operando andrebbe riconvertito in un intero.

Dim a As String
a = "5 polli in un pollaio"

Qui abbiamo dichiarato la varibile String e nella riga successiva gli abbiamo assegnato la stringa “5 polli in un pollaio”. Successivamente vedremo che genere di operazioni potranno essere fatte su queste stringhe.

Double : se si dichiara una variabile di questo tipo, si sta dicendo ad Excel che si vuole adibire un’aria di memoria a contenere un valore in virgola mobile. Esempi di valori in virgola mobile sono: 5,32 o 2,65 o 900,345 e così via.. In pratica tutti quei numeri che non sono interi.

Dim a As Double
x = 7.56

Abbiamo dichiarato una nuova variabile a come tipo double e successivamente gli abbiamo assegnato il valore 7,56.

Boolean: le variabili booleane possono contenere soltanto due tipi di valori, True e False, cioè Vero o Falso. Questo tipo di variabili servono a prendere delle decisioni all’interno del programma, infatti, per esempio, potrebbe essere valutato il contenuto di una di queste variabili e successivamente compiere una determinata operazione all’interno del flusso del programma a seconda del suo valore, che come abbiamo detto potrebbe essere vero o falso.

Dim decisione As Boolean
decisione = True

Nell’esempio abbiamo istanziato la variabile decisione e gli abbiamo assegnato il valore True.

Le operazioni

Vediamo innanzitutto quali sono gli operatori più comuni su Excel VBA:

Addizione+Viene usato per sommare due numeri. Es.: 4 + 3
SottrazioneViene usato per sottrarre due numeri. Es.: 9-2
Moltiplicazione*Viene usato per moltiplicare due numeri. Es.: 9*2 = 18
Divisione/Viene usato per la divisione tra due numeri. Es.: 10/5=2
Esponente^Viene usato per elevare un numero ad un altro. Es.: 4^2=16
Maggiore>Viene usato per confrontare due numeri o variabili e se il confronto è vero restituisce True altrimenti False. Es.: 5>4 restituisce True.
Minore<Viene usato per confrontare due numeri o variabili e se il confronto è vero restituisce True altrimenti False. Es.: 5<4 restituisce False.
Maggiore e uguale>=Viene usato per confrontare due numeri o variabili e se il confronto è vero restituisce True altrimenti False. Es.: 5>=4 restituisce True.
Minore e uguale<=Viene usato per confrontare due numeri o variabili e se il confronto è vero restituisce True altrimenti False. Es.: 5<=4 restituisce False.
Modulo%Restituisce il resto di una divisione. Es.: 5%2=1
Assegnazione=Assegna un valore alle variabile. Es.: a=7
Confronto<> Viene usato per confrontare due numeri o variabili e se sono uguali restituisce True altrimenti False. Es.: 5<>4 restituisce False.

Facciamo un esempio di codice VBA con gli operatori.

Dim a As Integer
a = 10
Dim b As Integer
b = 7
Dim c As Integer
c = a + b

Come si vede nell’esempio, vengono create 2 variabili, a e b. Ad ognuna di queste viene assegnato un valore. Successivamente verrà creata la variabile c e a questa verrà assegnata la somma di a e b, quindi 17.

Il costrutto If

Il costrutto If confronta due valori, se il risultato del confronto è vero allora esegue una determinata operazione.

Dim risultato As String 
Dim cella As Integer

cella = Range("A1").Value

If cella > 10 Then risultato = "Cella A1 maggiore di 10"

Range("B1").Value = risultato

Il pezzo di codice sopra è un programma che controlla il valore della cella A1. Se questo è maggiore di 10, allora nella cella B1 sarà scritta la stringa “Cella A1 maggiore di 10”.

Analizziamo il codice riga per riga. Nella prima stringa viene dichiarata come stringa la variabile risultato che conterrà il testo da inserire nella cella B1. Nella seconda stringa viene dichiarata la variabile cella come intero, e successivamente la funzione Range(“A1”).Value prende il contenuto della cella A1 e lo assegna alla variabile cella.

A questo punto avviene il confronto con If. Solo se il contenuto della variabile cella (e quindi il contenuto di A1) è >10 viene eseguito ciò che sta dopo la parola chiava Then: verrà inserita la stringa “Cella A1 maggiore di 10” nella variabile risultato.

Nell’ultima riga il contenuto di risultato viene inserito nella cella “B1”. La cella viene selezionata tramite l’attributo Value dell’oggetto restituito dalla funzione Range().

Il costrutto If – Else

Questo tipo di costrutto si può definire un perfezionamento del costrutto precedente. Questo perché, può capitare, che la clausola If può non essere soddisfatta, e quindi possiamo voler eseguire un’operazione alternativa al corpo dell’If. Vediamo la sintassi con un esempio:

Dim valore As Integer, risultato As String
valore = Range("A1").Value

If valore > 10 Then
    risultato = "Cella A1 maggiore di 10"
Else
    risultato = "Cella A1 minore o uguale di 10"
End If

Range("B1").Value = risultato

Come si vede nell’esempio, viene ripreso il codice dell’esempio precedente, con l’unica variante che nel caso in cui il corpo dell’If non si verifichi, verrà eseguito ciò che sta tra Else e End If.

Sub

Abbiamo visto i costrutti fondamentali, che ci consentono di svolgere i compiti più semplici. Adesso vediamo cosa fare per potere utilizzare i pezzi di codice creati e finalmente utilizzare la prima Macro.

La parola chiave Sub, su Excel, e precisamente in Vba, crea una funzione ma senza valore di ritorno. Questo significa che, il codice degli esempi sopra, per essere eseguito, deve stare dentro un blocco Sub, e poi essere richiamato da un pulsante, per esempio.

Sub confronto()

    Dim valore As Integer, risultato As String
    valore = Range("A1").Value

    If valore > 10 Then
        risultato = "Cella A1 maggiore di 10"
    Else
        risultato = "Cella A1 minore o uguale di 10"
    End If

    Range("B1").Value = risultato

End Sub

Tutto ciò che sta tra Sub ed End Sub, potrà essere richiamato con il nome di confronto, quando clicchiamo un pulsante, per esempio. Infatti andando a creare un pulsante sul nostro foglio di calcolo, potremo assegnargli la macro confronto appena creata.

Esempi di Macro in VBA

Dato un insieme di nomi scritti in minuscolo, vogliamo trasformarli in maiuscolo. Lo faremo creando una macro dal nome maiuscolo.

nomi in minuscolo
  1. Apriamo l’editor VBA come mostrato sopra e scriviamo la Sub che poi troveremo nella lista delle nostre macro. Clicca su Sviluppo e poi su Visual Basic e incolla questo pezzo di codice.
icona vba
Sub maiuscolo()
    Dim celle As Range
    Set celle = Selection
    For Each cella In celle
        cella.Value = UCase(cella)
    Next cella
End Sub

Abbiamo creato la Sub maiuscolo e la variabile di tipo Range celle. A questo punto gli assegniamo l’oggetto Selection, che contiene le celle selezionate. Scorrendo le celle con un For, possiamo convertirle con UCase che le trasforma in maiuscolo.

2. Clicca su Macro e vedrai la nostra Macro maiuscolo creata:

La lista delle Macro

3. Crea un pulsante nel foglio di calcolo.

pulsante excel

4. Quindi potrai disegnare un pulsante come segue sul foglio Excel:

pulsante excel

5. Dopo aver selezionato le celle da convertire e premuto il pulsate creato, ecco il risultato che otteniamo.

I nomi in maiuscolo

Conclusioni

In definitiva, come abbiamo visto, le macro sono uno strumento molto versatile per incrementare in maniera indefinita le potenzialità di Excel utilizzando il linguaggio VBA. Quello che si può fare dipende dalle potenzialità dell’utente, che con la piattaforma VBA diventa a tutti gli effetti un programmatore.

C’è ancora tanto altro da sapere?

Si c’è ancora tantissimo da sapere, ma la fame viene mangiando e quello che in questo articolo è un’infarinatura necessita senza dubbio di essere approfondito e studiato.

6 Comments

  1. Sono un utilizzatore di Excel ma sono agli inizi del VBA e già questa pagina mi ha davvero illuminato molto e vorrei continuare a leggervi!! Si può imparare altro del VBA dal Vostro sito e se si, dove devo iscrivermi?

  2. è chiaro per qualcuno che ha già una infarinatura informatica.
    troppo corto ovviamente, ma lo dici tu, ” la fame viene mangiando”

  3. Buongiorno, sono stato programmatore di mainframe dalla metà anni 80 ad inizio anni 2000, oggi utilizzo Excel per fare reportistica.
    Apprezzo le macro ma fatico nell’utilizzo del VBA, ho letto il suo articolo e spiega bene le funzioni di base, ma vorrei andare un po’ oltre nel senso leggere dati, fare delle scelte, scrivere altri Excel in base alle condizioni ecc.
    La mia richiesta è: mi sa consigliare un sito chiaro semplice dove io possa apprendere queste nozioni? Oppure un testo? In internet c’è di tutto anche troppo e molte volte (quasi sempre) mi perdo.
    Semplicemente un consiglio le chiedo da programmatore a ex-programmatore.
    Grazie codiali saluti.

    1. Ciao Cristian. Spero di avere tempo nei prossimi mesi per poter approfondire il discorso VBA adeguatamente sul mio sito. Intanto proverò a rispondermi sulla tua email.
      Buone cose

  4. Non sono un programmatore, ma mi piacerebbe imparare il VBA di Excel, mi avvalgo della stessa richiesta di Cristian se possibile.
    La mia richiesta è: mi sa consigliare un sito chiaro semplice dove io possa apprendere queste nozioni? Oppure un testo? In internet c’è di tutto anche troppo e molte volte (quasi sempre) mi perdo.
    Semplicemente un consiglio
    Cordiali Saluti

Comments are closed.