Lego le MIBO 012 - Excel (il mostro sacro)

rubrica: 

Martedì 4 maggio 2021

Certo che se volevo creare un pò di feeling tra voi e il Mostro Sacro di Excel, con questa bestiaccia in copertina il mio tentativo è fallito clamorosamente !!! Perbacco, che stupido sono !!!

Ma no, dai, Excel non è poi un mostro né una mala-bestia, è solo un tipetto che ama farsi rispettare. Per cui, forza e coraggio 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. La stessa cosa è 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 da 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 for Application. Di solito il novanta per cento degli utenti di Excel non sa dell’esistenza di questo ‘sotto-programma’ oppure di fronte alla difficoltà, se ne scappa via. Non vi dico che VBA sia una passeggiata ma neanche che sia una roba lunare: serve solo molta pazienza e una 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 Excel con le varie celle, annesse e connesse.

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 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.     

Poi 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. Non voglio che vi soffermiate troppo sui contenuti ma piuttosto sui simboli.

Scendendo dall’alto al basso, dopo il rettangolo 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: ‘a’ , ‘b’ e ‘c’.

Supponiamo di immettere i valori: 1, -5, 6 che corrispondono ai coefficienti dell’equazione da risolvere:  x2 – 5x + 6 = 0.

Quando avrai schiacciato ENTER, la macchina calcolerà al volo il DELTA ‘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 la domanda (“if” = “se”).

Se il discriminante fosse negativo, il programma prenderebbe il lato destro visualizzando da qualche parte “L’equazione è impossibile” e andrebbe dritto 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, sennò rischiamo di entrare in confusione.

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>  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è la 'foglia' di Excel invisibile all'interno della 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 SENZA BOTTONI e SENZA VBA. 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 COSTANTE coi server della Piattaforma di trading
  • La seconda parte sarà gestita tramite EVENTI, come per esempio, far girare il programma perché ho comprato una call e la debbo inserire oppure per mettere un timer alla storicizzazione dei dati … o anche altre mille eventi

Per chiarire ancora: secondo voi, “Lego le MIBO” ‘muto’ che tipo di lavoro è?  Cioè: “E' sì o no un VBA?”.

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

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

Vi aspetto sempre su questo Sito il prossimo venerdì 7 maggio.

Francesco Caranti