Lego le Mibo (10) – Excel (il mostro sacro)

rubrica: 

Certo che se volevo creare un pò di affiatamento tra voi e il Mostro Sacro di Excel, con questa bestiaccia in copertina il mio tentativo è fallito clamorosamente.

Ma no, dai, Excel non è poi un mostro né una mala-bestia, è solo un tipetto che ama farsi rispettare. Per cui:  'dai dunque' che cominciamo a conoscerlo un po’ da vicino. Come diceva non so chi:  ‘amarlo per conoscerlo, conoscerlo per amarlo’   che in assoluto mi sembra una affermazione molto sensata.

Allora, dicevamo … quando andiamo in montagna, certamente ci vestiamo a strati perché la buriana o il sole cocente sono sempre dietro l’angolo e così è quando sfogliamo una cipolla, strato dopo strato arriviamo al centro del bulbo.

Excel, anche se non sembra, è proprio come una cipolla: quello che vediamo nelle celle, quello che manipoliamo e spostiamo di Foglio in Foglio è lo strato esterno, cioè quello più palpabile. In realtà, però, volendo scavare negli strati sottostanti, troviamo un linguaggio di programmazione che si chiama VBA , cioè Visual Basic Application. Di solito il novanta per cento degli utenti di Excel non sa dell’esistenza di questo ‘sotto-programma’ oppure di fronte alla difficoltà, scappa a gambe levate. Non vi dico che VBA sia una passeggiata ma neanche che sia una roba lunare: serve solo tanta pazienza e una traccia didattica semplice.

Nel grande mondo di Microsoft non si sa se sia nato prima l’uovo o la gallina nel senso che forse all’inizio c’era l’Excel che tutti un po' conosciamo e solo più tardi ci hanno appiccicato il VBA, oppure, molto probabile che sulle basi di VBA abbiano creato le celle con annessi e connessi.

Volendo fare un briciolo di storia, posto che i termini Visual e Application siano esaustivi per definizione, il busillis è da cercare sul termine Basic, acronimo complicatissimo che sta per "Beginner's All-purpose Symbolic Instruction Code" ovvero "codice di istruzione simbolica di uso generale per principiante".    Nonostante la definizione sia alquanto macchinosa, quasi a tradire la finalità dell’uso semplice che gli volevano dare smiley, la caratteristica del Basic iniziale (siamo nel 1964) era quella di contenere al suo interno il concetto di ‘ciclo di programmazione’, ovvero quello che in informaticese equivale al ‘flow chart’ (diagramma di flusso).

In parole povere: tu prendi carta e penna, disegni un flow-chart di quello che vuoi realizzare e poi traduci questo diagramma in una serie di istruzioni.     Bene: lo dai in pasto al VBA e il gioco è fatto.

Questo è un flow-chart qualsiasi preso da Internet che non c’entra niente con ‘Lego le MIBO’ ma che mi serve per mostrarvi la simbologia e la grafica nel suo complesso. Questo diagramma è in grado di risolvere l’equazione di secondo grado ma non voglio che vi soffermiate troppo sui contenuti ma piuttosto sui simboli.

Scendendo dall’alto al basso, dopo l’INIZIO, c’è subito un parallelogramma con le scritte ‘a, b, c’.

Il parallelogramma corrisponde a una ACCEPT, cioè il computer si ferma e ACCETTA da te che tu inserisca 3 valori distinti in ‘a’ , in ‘b’ e in ‘c’.

Supponiamo di immettere i valori: 1, -5, 6 che corrispondono all’equazione da risolvere:  x2 – 5x + 6.

Quando avrai schiacciato ENTER, la macchina calcolerà al volo la ‘D greca’ (Discriminante delta), cioè b2 – 4ac che nel nostro caso sarà:   (-5)2 -4(1 x 6) = 25 – 24 = 1

Dopo questo breve calcolo, il flow-chart procede con un bivio (il bivio è sempre un rombo) con un ingresso in alto e due uscite laterali. All’interno del rombo c’è posto per una domanda (“if” = “se”).

Se il discriminante venisse negativo il programma prenderebbe il lato destro visualizzando da qualche parte “L’equazione è impossibile” e convergerebbe alla FINE (va detto infatti che in caso di discriminante negativo, l’equazione ammette due soluzioni che però non sono valide nel contesto di noi umani in quanto ‘complesse e coniugate’). 

Visto che il nostro discriminante è “1” ci troviamo nel ramo sinistro della “if” e siccome c’è un altro rombo che ci chiede se per caso il discriminante sia ZERO, usciamo ancora una volta a sinistra nel ramo ‘NO’.

Perfetto: siamo quasi alla fine. All’interno del rettangolo troviamo lo sviluppo delle 2 soluzioni dell’equazione:

  • X1 = (-b – radice (Delta)) / 2a  = (5 – 1) / 2 = 2  
  • X2 = (-b + radice (Delta)) / 2a  = (5 + 1) / 2 = 3  

Nota:

Per provare l’esattezza della soluzione, basta porre a zero l’equazione così:    x2 – 5x + 6 = 0 e sostituire prima col valore “2”, poi col valore “3”.

Avremo:

  • 22  - 5 x 2 + 6    =    4 – 10 + 6   che è uguale a zero
  • 32  - 5 x 3 + 6    =    9 – 15 + 6   che è anch’esso uguale a zero

-------------------------------------------------------------------------------------------------------------------------------------------

Adesso però bisogna fare uno stop al televoto, sennò rischiamo di fare una confusione tremenda.

Attenzione perché voi, futuri programmatori, non dovrete mai confondere le due cose che vi sto per dire.

Ma qui dobbiamo fare un passo indietro: non so se lo ricordate ma in “Lego le Mibo (6) ” <quella coi vasi comunicanti o anche a pagina 41 del pdf riassuntivo>  mentre vi parlavo del calcolo FIFO, vi avevo un po' sfumato il concetto del ‘batch’ … … …  ma, state tranquilli, vi riporto qui il copia-incolla di quel passo:

“… In informatica, col termine ‘batch’ ci si riferisce alla esecuzione di una procedura (step) che per sua natura non avviene in tempo reale ma è rimandata nel tempo tramite il ‘lancio’ di un certo ‘script’. Una procedura di tipo batch è l’esatto opposto di quella ‘on line’ in cui i dati sono sempre tenuti aggiornati in modo simultaneo (esempio: esportazione DDE, celle corrispondenti di Excel …).

In ambiente Excel, il lancio di uno script batch corrisponde alla attivazione del cosiddetto ‘evento’ o anche ‘macro’. Normalmente un evento (macro) viene lanciato tramite un ‘pulsante’ (bottone) di Excel. La scelta tra un tipo di elaborazione e l’altro è affidata all’esperienza del programmatore …”

Perfetto: il finale diceva che la scelta tra una elaborazione e l’altra è affidata all’esperienza del programmatore.

Se in quella lezione forse facevamo un po' fatica a capire, oggi siamo in grado di squarciare il velo e la frase magica per comprendere è questa:

  • Tutto ciò che avviene SENZA l’intervento di ‘pulsanti o bottoni’ è riconducibile a Excel così come lo conoscevate prima di oggi (senza sfogliare nessuna cipolla)
  • Ciò che invece avviene per via di “EVENTI” e si attiva tramite ‘pulsanti o bottoni’ è un ‘batch’ che andrà a scomodare il VBA, cioè il ‘piano’ di Excel invisibile e sottostante la nostra cipolla

Un po' più chiaro, adesso?

Ancora di più, un altro passo avanti, dai!

Quando dovrò progettare un lavoro complesso dovrò preliminarmente dividerlo in due parti:

  • La prima parte dovrà connettere tra loro le celle dello stesso foglio e quelle ad essa collegata in altri fogli. Questa situazione sarà, per così dire ‘senza eventi a bottone’ e tutto viaggerà autonomamente. In questa situazione si collocano anche i Fogli Excel collegati in DDE che NON HANNO BISOGNO DI BOTTONI O PULSANTI poiché vivono ‘ininterrottamente’ un dialogo coi server della Piattaforma di trading
  • La seconda parte sarà gestita tramite EVENTI, come per esempio, far girare il programma perché ho acquisito un Ordine di Borsa oppure per mettere un timer alla storicizzazione dei dati … o altre mille eventi

Per chiarire ancora: secondo voi, chi mi ha richiesto l’invio di “Lego le MIBO” ‘muto’ che tipo di lavoro ha ricevuto?

Domando dunque: “Ha ricevuto un progetto con VBA o senza VBA?”.

Il quiz rimane aperto e la soluzione sarà per la volta prossima.  Attenti, però, perché in questa domanda si cela un subdolo trabocchetto.

Si accettano anche risposte via mail all’indirizzo: fc@francescocaranti.net

Vi aspetto sempre su questo Sito.

Francesco Caranti