Ogni lunedì lo stesso rituale: si apre l'esportazione del gestionale, si eliminano due colonne inutili, si mette in grassetto l'intestazione, si allargano le colonne, si applica un filtro e si ordina per data. Dieci minuti di clic sempre uguali. È il caso ideale per una macro di Excel, cioè una sequenza di istruzioni scritta in VBA (Visual Basic for Applications) che il programma esegue al posto vostro.
Abilitare la scheda Sviluppo
Gli strumenti per le macro stanno nella scheda Sviluppo, che di norma è nascosta. Si attiva da File > Opzioni > Personalizza barra multifunzione, spuntando la voce Sviluppo nell'elenco a destra. Da lì si accede al registratore di macro e all'editor di Visual Basic, che si apre anche con la scorciatoia Alt+F11.
Registrare la macro
Il registratore è il modo più rapido per iniziare: trasforma in codice le azioni che compite con mouse e tastiera.
- Aprite un file di esempio identico a quelli che dovrete elaborare.
- Premete Registra macro, date un nome senza spazi (per esempio
FormattaEsportazione) e scegliete dove salvarla. - Eseguite le operazioni con calma e senza errori: anche i clic sbagliati verranno registrati.
- Premete Interrompi registrazione.
Una scelta importante riguarda il luogo di salvataggio. Se la macro serve su file sempre diversi, conviene salvarla nella Cartella macro personale, un file nascosto che Excel apre a ogni avvio e che rende la macro disponibile in qualsiasi cartella di lavoro.
Leggere il codice generato
Aprendo l'editor si trova qualcosa del genere:
Sub FormattaEsportazione()
Columns("C:D").Select
Selection.Delete Shift:=xlToLeft
Rows("1:1").Select
Selection.Font.Bold = True
Columns("A:F").Select
Columns("A:F").EntireColumn.AutoFit
Range("A1").Select
Selection.AutoFilter
End Sub
Il registratore è prolisso: seleziona una cosa e poi agisce sulla selezione, esattamente come fareste a mano. Funziona, ma è lento e fragile. Lo stesso codice si può scrivere agendo direttamente sugli oggetti:
Sub FormattaEsportazione()
With ActiveSheet
.Columns("C:D").Delete
.Rows(1).Font.Bold = True
.Columns("A:F").AutoFit
.Range("A1").CurrentRegion.AutoFilter
End With
End Sub
Eliminare i Select è il primo miglioramento da fare quasi sempre: la macro diventa più veloce e non dipende da dove si trova il cursore.
Il problema dei riferimenti fissi
Il registratore scrive riferimenti assoluti. Se oggi i dati arrivano fino alla riga 250, il codice potrebbe contenere Range("A1:F250"). Il mese prossimo le righe saranno 300 e la macro ignorerà le ultime cinquanta senza segnalare nulla. Per trovare l'ultima riga piena si usa una formula classica:
Dim ultima As Long
ultima = Cells(Rows.Count, "A").End(xlUp).Row
Range("A1:F" & ultima).Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes
L'istruzione parte dal fondo della colonna A e risale fino alla prima cella non vuota, proprio come premere Ctrl+Freccia su dall'ultima riga del foglio. Anche CurrentRegion, usato prima per il filtro, risolve lo stesso problema: individua il blocco di celle contigue attorno alla cella indicata.
Salvare nel formato giusto
Un file .xlsx non può contenere macro: se provate a salvarlo, Excel avvisa che il codice andrà perso. Le alternative sono:
| Formato | Contiene macro | Uso tipico |
|---|---|---|
.xlsx |
No | Distribuire dati |
.xlsm |
Sì | Cartella di lavoro con macro incluse |
.xlsb |
Sì | File grandi, formato binario |
| Cartella macro personale | Sì | Macro disponibili ovunque sul proprio PC |
Una soluzione pulita è tenere la macro nella cartella personale o in un file .xlsm dedicato e continuare a salvare i dati in .xlsx: chi riceve il file non vede avvisi di sicurezza.
Sicurezza delle macro
Le macro possono fare quasi tutto sul computer, ed è per questo che sono storicamente un veicolo di malware. Excel di norma le disattiva nei file provenienti da Internet o ricevuti via email, mostrando una barra di avviso. La regola pratica è semplice: abilitate le macro solo nei file che avete scritto voi o che provengono da una fonte interna conosciuta, mai in un allegato inatteso che chiede di «abilitare il contenuto» per essere letto. Nelle aziende è utile salvare i file con macro in una cartella definita come percorso attendibile, invece di abbassare il livello di sicurezza generale.
Rendere la macro comoda da usare
Una macro che nessuno ricorda di lanciare è inutile. Si può assegnare a una scorciatoia da tastiera al momento della registrazione, aggiungerla alla barra di accesso rapido oppure collegarla a un pulsante disegnato nel foglio. Aggiungere un messaggio finale con MsgBox "Formattazione completata" è un piccolo dettaglio che rassicura chi la usa.
Nel mio lavoro consiglio di partire sempre dal registratore e poi rifinire il codice a mano: si impara VBA guardando come Excel traduce le proprie azioni, e in poche settimane si scrivono macro da zero.
In sintesi
- Attivate la scheda Sviluppo e usate il registratore per generare il primo codice.
- Togliete i
Selecte agite direttamente su fogli, righe e intervalli. - Sostituite i riferimenti fissi con il calcolo dell'ultima riga o con
CurrentRegion. - Salvate in
.xlsmo nella cartella macro personale, non in.xlsx. - Abilitate le macro solo in file di provenienza certa.