Da Excel VBA a Google Apps Script: cosa cambia davvero per chi automatizza fogli
Chi ha imparato a programmare Excel con VBA si trova spaesato davanti a Google Sheets. La buona notizia è che il 90% dei concetti torna identico. Una mappa di cosa cambia: linguaggio, trigger, oggetti, quote, distribuzione.

Chi negli anni Duemila ha lavorato in azienda con Excel quasi sempre ha imparato un minimo di VBA. Macro, moduli, Sub e End Sub, l’editor con lo sfondo grigio premendo Alt+F11. Quel patrimonio non è perso quando si passa a Google Sheets: è tutto migrabile, perché i concetti di fondo sono gli stessi. Cambia il linguaggio (da Visual Basic a JavaScript), cambia l’ambiente (da un editor dentro Excel a un editor web), cambiano alcune regole di esecuzione. Il resto è lo stesso lavoro.
I concetti che restano identici
- il foglio è una griglia di celle, identificabile per riga e colonna o per nome del foglio;
- una macro è una funzione che si esegue su richiesta o in risposta a un evento;
- si può scrivere una funzione personalizzata che si comporta come una formula del foglio;
- esistono eventi automatici (apertura del file, modifica di una cella) a cui si possono attaccare azioni;
- il codice può leggere, scrivere, formattare, copiare, ordinare, filtrare i dati del foglio.
Se in VBA conoscevi tutto questo, in Apps Script lo conosci già.
La mappa di corrispondenza
Una piccola tabella aiuta più di dieci paragrafi:
| Excel VBA | Google Apps Script |
|---|---|
Sub / End Sub |
function nomeFunzione() { ... } |
Dim x As Integer |
let x; (o const x) |
Range("A1").Value |
SpreadsheetApp.getActiveSheet().getRange('A1').getValue() |
Cells(2, 3).Value = "x" |
sheet.getRange(2, 3).setValue('x') |
Worksheets("Ordini") |
SpreadsheetApp.getActive().getSheetByName('Ordini') |
MsgBox "ciao" |
Browser.msgBox('ciao') oppure SpreadsheetApp.getUi().alert('ciao') |
Workbook_Open() |
function onOpen() { ... } |
Worksheet_Change() |
function onEdit(e) { ... } |
| Funzione utente in modulo | Funzione esposta nel foglio: stessa sintassi =mia(A1) |
| Riferimento esterno (ADO, query) | UrlFetchApp.fetch(url) |
Le tre cose che spiazzano di più
1. Tutto è online, e questo cambia gli eventi. In Excel, una macro Worksheet_Change gira in locale, sulla tua macchina, e ha pieno accesso al sistema operativo. In Apps Script, onEdit gira sui server di Google. Da lì non puoi mandare email, non puoi chiamare API esterne, non puoi accedere ad altri Drive. Per queste cose servono i trigger installabili, da configurare manualmente in Trigger → Aggiungi trigger. È la trappola in cui inciampa chi viene da VBA: lo script sembra non fare nulla, ma è solo che il trigger semplice non aveva i permessi.
2. Le quote, non le prestazioni. In Excel, il limite di una macro era la potenza del tuo PC. In Apps Script il limite è una quota giornaliera fissata da Google: 6 minuti per esecuzione singola, 90 minuti totali al giorno (gratuito), 1500 email al giorno con Workspace, 20.000 chiamate UrlFetchApp. Se hai una macro che gira due ore in Excel su 50.000 righe, in Apps Script va spezzata in blocchi e richiamata in sequenza con ScriptApp.newTrigger().timeBased(). Non è un difetto: è il prezzo dell’esecuzione su infrastruttura condivisa.
3. La distribuzione. Un file Excel con macro lo passi via email e chi lo apre vede subito le macro funzionanti (al massimo deve abilitarle). Un Google Sheet condiviso porta con sé lo script, ma ogni utente deve autorizzare gli scope la prima volta. Se gli scope sono sensibili (Drive, Gmail, esterno), può scattare una verifica Google che chiede una app verification ufficiale. Per uso interno o per pochi utenti questo si gestisce con “consenti l’accesso a utenti non verificati”, ma è un passaggio in più da spiegare a chi userà il foglio.
Una macro VBA tradotta, riga per riga
Per fissare le idee, una macro classica VBA: scrivere la data di oggi nella colonna E quando lo stato nella colonna D diventa “chiuso”.
Excel VBA:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 And Target.Value = "chiuso" Then
Cells(Target.Row, 5).Value = Date
End If
End Sub
Google Apps Script:
function onEdit(e) {
const range = e.range;
if (range.getColumn() === 4 && e.value === 'chiuso') {
range.getSheet().getRange(range.getRow(), 5).setValue(new Date());
}
}
Stessa logica, sintassi diversa. L’oggetto e contiene tutte le informazioni dell’evento: chi ha modificato, quale cella, valore vecchio e nuovo. È più ricco di Target di VBA, e questo è uno dei pochi punti in cui Apps Script è effettivamente più espressivo.
Cosa diventa più facile
Tre cose che in VBA erano dolorose e in Apps Script sono naturali:
- chiamare API esterne:
UrlFetchApp.fetch()e finisce lì, niente librerie ADO, niente WinHTTP; - mandare email: una riga,
MailApp.sendEmail(...), senza Outlook collegato; - collegarsi a Calendar, Drive, Maps, Gmail: una libreria pronta per ogni servizio Google, senza autenticazione manuale.
Conclusione: vale la pena migrare?
Per il singolo file Excel che gira sul PC di una persona, no. Quel file fa il suo lavoro e va lasciato in pace. Ma per qualsiasi processo aziendale che coinvolge più persone, dati che cambiano spesso, e necessità di accedere da remoto, Google Sheets + Apps Script è un ambiente più sereno: niente versioni che si moltiplicano via email, niente “ma sul mio PC funziona”, niente macro che si rompono al cambio di Office.
Il VBA che hai imparato non è sprecato. È il 90% del lavoro fatto. Il restante 10% è una sintassi diversa e un paio di abitudini nuove. Una settimana di pratica e il salto è chiuso.

Blogger dal 2001, Nativo Digitale, Developer.
Da 15 anni mi occupo di IT per una grande Azienda.
Lavoro per abbattere il Digital Divide.
Visita i miei altri progetti
sardiniamobility.com
www.cyberness.it