Come VBA valorizza l’esistente e apre nuove prospettive
Racconto di VBA e dei suoi vantaggi tramite una piccola storia. Qualche anno fa, fui chiamato da una piccola azienda che gestiva per conto dei propri clienti, il servizio di prenotazione camere delle loro strutture ricettive. Si trattava di decine di alberghi medi e piccoli, di pensioni, di appartamenti, di singole camere: qualche centinaio di strutture per migliaia di camere disponibili, in cui ciascuna camera aveva una propria tariffa che variava nel corso dell’anno, tariffe peraltro soggette continuamente a sconti e promozioni.
Tutto il sistema di gestione si basava su un grande foglio Excel con circa 700 colonne per coprire due anni di prenotazioni e più di 7.000 righe: ogni cella individuava la tariffa della singola camera in un determinato giorno indicandone anche lo stato: libera, prenotata, occupata.
Leggi anche: Scaricare dati in Excel usando Visual Basic
Tutti gli hotel utilizzano sistemi di prenotazione alberghiera, ma questo era stato sviluppato in casa con Excel e così permetteva di raggiungere strutture che magari non si sarebbero potuti permettere i costi di gestione di sistemi più complessi.
Quando anche Excel deve prendersi i suoi tempi
I ragazzi dell’azienda di servizio avevano costruito un bellissimo foglio Excel pieno di formule che, semplicemente indicando data, luogo e durata del soggiorno oltre agli sconti e alle promozioni da applicare, verificava se la camera fosse disponibile, ne calcolava la tariffa e, dopo una conferma, effettuava la prenotazione. Ottima idea e ben realizzata.
Ogni casella del foglio conteneva una formula che, utilizzando alcune funzioni SE(), poteva calcolare il risultato finale. Ma, crescendo il numero di camere gestite, i tempi di risposta del sistema inevitabilmente si allungavano moltissimo: occorreva qualche minuto per ottenere la risposta, senza contare che per effettuare la verifica fuori linea (ogni notte) di tutti i dati inseriti occorreva qualche ora.
VBA per superare i limiti intrinseci del foglio di calcolo
L’azienda si pose il problema di come migliorare le prestazioni: cambiare sistema passando da Excel ad Access (o MySQL, con programmi scritti in PHP) avrebbe risolto sicuramente il problema, ma ci sarebbero volute parecchie settimane di addestramento del personale sui database e sul linguaggio SQL di interrogazione delle tabelle. Senza contare tempi e risorse per la progettazione e realizzazione del prodotto, per i test dei risultati; risorse e tempi di cui l’azienda non disponeva.
Una valida alternativa era costituita dai corsi che Apogeo iniziava proprio in quel periodo a proporre. Decidemmo di realizzare un corso VBA mirato alla costruzione delle procedure adatte a risolvere il problema del sistema di prenotazione: quindi un corso che, partendo da zero, insegnasse a costruire prima semplici macro e successivamente procedure via via più complesse per creare quel sistema che in un solo secondo avrebbe ricalcolato tutti i dati della gestione. La conclusione di questa storia è stata la progettazione di un corso VBA mirato ad apprendere le tecniche di programmazione delle procedure e nello stesso tempo a risolvere uno specifico problema.
Perché (e come) VBA
Visual Basic for Applications (VBA) è un sottoinsieme del linguaggio Visual Basic che Microsoft ha creato per sviluppare speciali programmi chiamati macro da utilizzare con Excel e con tutti gli altri applicativi esistenti all’interno del pacchetto MS Office 365, come ad esempio Word, Access, PowerPoint.
Per chi acquista MS Office oppure si abbona a MS Office 365, VBA è già compreso nel pacchetto, ma non può lavorare fuori da Office. Il linguaggio di programmazione VBA viene utilizzato per creare funzioni di Excel, per eseguire i comandi di tutti gli applicativi di Office, per eseguire qualunque operazione in modo automatico, esattamente come un qualsiasi linguaggio di programmazione che può creare tutti programmi che quotidianamente si utilizzano sui PC.
Uno dei vantaggi di VBA è l’essere già compreso nell’applicativo Excel: con tutti gli altri linguaggi di programmazione (quali, ad esempio, PHP, Python, Java eccetera) sarebbe necessario ricorrere a un’interfaccia per operare con Excel, cosa non proprio semplice.
Come si fa l’automazione della produttività individuale
Dalla mia esperienza di docente nei corsi di programmazione, per risolvere un problema di calcolo o per automatizzare un’operazione servono due competenze principali:
- saper analizzare un problema da un punto di vista razionale, scomponendolo in operazioni semplici, ciascuna delle quali composta da una successione ordinata di singole operazioni, che, eseguite una dopo l’altra, consentono di arrivare all’obiettivo che ci si era proposto;
- tradurre le operazioni semplici in istruzioni di una procedura, da scrivere utilizzando il linguaggio VBA.
Anche se questo secondo punto può sembrare il più difficile tra i due, in realtà è la prima parte quella più critica.
Un esempio pratico di macro in VBA
Vediamo un piccolo esempio di macro. Un foglio contiene i seguenti valori:
Nella cella J2 si deve calcolare la somma dei ricavi: =B2+D2+F2+H2
e nella cella K2 la somma delle quantità: =C2+E2+G2+I2
. Se la tabella è piccola lo si può scrivere direttamente ma, se fosse più grande, si potrebbe ricorrere alla seguente macro:
Questa nuova funzione si può applicare nella seguente formula da copiare in basso fino alla cella J6:
La nuova funzione è a tutti gli effetti una macro Excel scritta nel linguaggio VBA.
Immagine di apertura di Kelly Sikkema su Unsplash.