Uno dei grandi vantaggi di Excel è quello di poter creare per chiunque un modo di gestione dei dati a volte davvero complicato e complesso, file che a volte diventano un vero e proprio strumento gestionale. Questa facilità però crea anche uno dei problemi di questi fogli, in particolare quando i dati si mescolano con la logica con cui vengono elaborati, la difficile comprensione per chi non lo ha creato e la difficile manuntenzione.
Purtroppo è un problema che si trasferisce spesso al codice VBA, sia per come questo interagisce con i figli di calcolo sia in parte per la struttura del linguaggio. Ma una delle basi della costruzione di un buon software è proprio la separazione fra i dati e quella che viene chiamata business logic, ovvero l’insieme di regole con cui questi dati vengono elaborati.
La separazione fra dati e logica con cui sono elaborati porta diversi vantaggi. Innanzitutto, rende il codice più modulare e facile da aggiornare o correggere, poiché è possibile modificare la logica senza influenzare la struttura dei dati e viceversa. Inoltre, consente una maggiore riusabilità: la stessa logica può essere applicata a diversi insiemi di dati, e gli stessi dati possono essere utilizzati da diverse parti del programma.
Questa è la teoria, nella pratica, ancora di più con dati poco strutturati come spesso accade negli strumenti creati con Excel questo non succede. Per ovviare a questo problema nell’ultimo anno abbiamo sviluppato un serie di classi che consentono di lavorare con dati non strutturati in modo simile alla logica
NoSQL e con una serie di “capacità” che consente di impostare le regole in modo molto “umano”.
Un modo di lavorare di questo tipo consente di:
- aggiungere dati senza preoccuparsi di come sono memorizzati;
- separare in modo completo le fomrule di trasformazione dai dati;
- inserire le formule per come sono diefinite senza preoccparsi se dopo saranno utilizzate in forma inversa;
- gestire in automatico le trasformazioni di unità di misura come da €/pz a €/cf;
- gestire in automatico le trasformazioni di grandezze come da grammi a kilogrammi;
- avere una rappresentazione chiara dei calcoli eseguiti.
Un esempio pratico visualizzato con una
struttura ad albero aiuterà a chiarire questi concetti e far intuire quanto possa essere più comodo impostare il codice VBA in questo modo invece di inserire la logica nel codice.
Nelle tabelle qui sotto potete vedere i dati utilizzati, alcuni specifici della vendita altri generici (costi indiretti e cambio) e le formule utilizzate
Nello schema che rappresenta il calcolo qui sotto potete vedere alcuni dei meccanismi con cui funzionano le classi:
- per il calcolo del ricavo è stata applicata la formula diretta: Ricavo=Ricavo Unitario*Pezzi Venduti ;
- per il cacolo dei costi indiretti la formula Costi Indiretti%=Costi Indiretti/Costo Materiale è stata applicata in forma inversa Costi Indiretti=Costo Materiale*Costi Indiretti%;
- il costo unitario espresso in €/cf è stato convertito in €/pz per poter essere moltiplicato per i pezzi consegnati;
- le spese di spedizione in $/pz sono state convertite in €/px per poter essere sommati al costo unitario convertito in precedenza.
Questo esempio mostra come lavorndo in questo modo sia estremamente semplice definire le regole di trasformazione dei dati e come il calcolo sia indipendente dall'unità di misura dei dati in ingresso.
I file scaricabili associati a questo articolo e il codice delle funzioni sono riservati agli utenti abbonati del sito.
Gli esempi contenuti nel sito sono per uso personale, non é consentito l'uso professionale, commerciale o la riproduzione senza autorizzazione.