Elio Buonocore e le Formule Matriciali  - seconda parte                           email :  elibuono@tin.it

La seconda parte del corso sulle matriciali è articolata con esempi raccolti nel file xls "FormuleMatriciali". La cartella contiene 9 fogli con gli esempi, ed è associata ad un file .doc con le spiegazioni (in parte anticipate in questa pagina). Una volta scaricato il file .zip, converrà che l'utente stampi il file doc per poter seguire spiegazioni - esempi senza perdere concentrazione nel "saltare" da una videata all'altra. Non sarà difficile seguire spiegazioni-esempi in quanto Elio ha titolato gli argomenti sul file doc, con i nomi dei fogli e/o degli intervalli a cui le spiegazioni si riferiscono.

Ricerca valori duplicati:
Si supponga di avere una lista di valori come quella seguente e di averla denominata Elenco.

<Intervallo Elenco del Foglio di lavoro Duplicati>

L’utilizzo di una formula ordinaria come “=CONTA.SE(Elenco;”a”)” ci informa se il valore “a” risulta presente più di una volta nella lista. In tal caso, infatti, restituirà un valore superiore ad 1.
Possiamo sfruttare la formula nella formattazione condizionale. Selezioniamo le celle A2:A15 e dal menù Formato clicchiamo su Formattazione Condizionale. Nella finestra successiva scegliamo dalla casella combinata “la formula è” e digitiamo nella casella di testo =CONTA.SE(Elenco;$A2)>1.
La possibilità di inserire nella formula un riferimento misto come $A2 ci risparmia l’alternativa di selezionare una alla volta le celle dell’intervallo A2:A15 per inserire la formula della formattazione condizionale “=CONTA.SE(Elenco;$A$2)>1” nella cella A2; “=CONTA.SE(Elenco;$A$3)>1” nella cella A3 e così via. Il riferimento nella forma di sintassi $A2 ( simbolo $ alla sola sinistra del riferimento di cella) indica ad Excel che la formula deve essere copiata nelle celle dell’intervallo selezionato avendo come riferimento assoluto la colonna A e come riferimento relativo le riga 2. Se infatti dopo aver inserito nella finestra anche i dati relativi al formato ( nel foglio di lavoro è scelto il Motivo di colore rosso ) e chiuso la finestra con OK, selezioniamo la cella A5 e apriamo ancora la finestra della Formattazione Condizionale la formula del criterio che possiamo leggere è “=CONTA.SE(Elenco;$A5)>1” . Se, invece, selezioniamo un intervallo di più celle la formula farà riferimento alla prima di tali celle; sempre, comunque, con riferimento di tipo misto. Esemplificando, dopo aver selezionato l’intervallo A7:A10 e navigato fino alla finestra della Formattazione Condizionale leggeremo “=CONTA.SE(Elenco;$A7)>1” che per quanto esposto ci indica che il criterio della cella A8 perché questa appaia rossa non è quello per il quale sia duplicato il valore testuale “e” nella serie, bensì il valore “f”.
Sempre con modalità di formula ordinaria si può utilizzare la funzione CONTA.SE nella cella B2 per esempio come ” =SE(CONTA.SE(Elenco;A2)>1;"duplicato";"")” e trascinare la formula fino a B15 per ottenere informazioni simili al primo metodo.
Fin qui solo formule ordinarie. Come, però, risolvere il problema di ottenere con una formula in una sola cella l’informazione se uno qualsiasi dei valori del nostro elenco risulta duplicato?
Utilizzeremo la formula CONTA.SE in versione matriciale!
Procediamo per Step. Nonostante un passaggio implichi una formula matriciale multicella, in realtà tutti i passaggi possono essere riassunti in un’unica formula restituita da una singola cella. In sostanza i passaggi intermedi non sono obbligatori e si procede attraverso essi solo per fini esemplificativi.

Se in una formula CONTA.SE, all’argomento criterio ( che è il secondo argomento della formula) assegniamo una matrice piuttosto che un valore singolo, l’operazione di ricerca verrà reiterata per ogni valore della matrice e restituita in una cella diversa per ogni valore ricercato. Esemplificando, se vogliamo conoscere quante volte si ripetono i valori “a”, “y” e “p” nel nostro elenco, avremo bisogno di 3 celle nelle quali inserire la nostra formula matriciale. Selezioniamo per es. le celle E8:E10 e scriviamo : =CONTA.SE(Elenco;{"a"\"y"\"p"}), quindi premiamo Ctrl + Maiusc + Invio ottenendo {CONTA.SE(Elenco;{"a"\"y"\"p}. Otteniamo nelle celle il risultato di “2”,”1”,”1”. Per verificare che tutto funzioni cambiamo il valore della cella A4 da “b” a “p”. Notiamo che il valore della cella E10, varia coerentemente da 1 a 2. Alcune considerazioni sulla sintassi: abbiamo passato il secondo argomento sotto forma di “matrice di costanti” e, pertanto, è stato necessario racchiudere i nostri valori costanti tra parentesi graffe. Queste, contrariamente a quelle più esterne, debbono essere direttamente digitate ( eventualmente con l’ausilio dell’utilità inserisci simbolo oppure con la scorciatoia da tastiera Alt+0123 e Alt+0125 ). Ancora, la matrice di costanti passata è di tipo verticale e, pertanto i valori devono essere separati non dal punto e virgola “;” ma bensì dal back slash “\” (In USA si usa la virgola per la separazione degli elementi orizzontali e il punto e virgola per quelli verticali). In sostanza la matrice di costanti {"a"\"y"\"p} equivale ad un riferimento del tipo C16:C18 posto che nella cella C16 vi sia il valore “a”; in quella C17 il valore “y” e in quella C18 il valore “p” (vedi formule nelle celle F8:F10). Se, invece, utilizzassimo la sintassi {"a";"y";"p"}, come nelle celle J14:J16 avremmo i valori “2”,”2”,”2”., in quanto Excel nelle formule delle 3 celle poste verticalmente reitera la ricerca del valore “a”. In sostanza si passa erroneamente un matrice di costanti orizzontale, equivalente ad un riferimento di un gruppo di celle orizzontali ( vedi formula nelle celle L14.L16 con riferimento alle celle N8:P8 ), invece che di una matrice di costanti verticali.

Ora è facile comprendere che se vogliamo effettuare una ricerca su tutti gli elementi del nostro elenco avremo bisogno di tante celle quante sono quelle dell’elenco. Selezioniamo allora le celle H2:H15 e scriviamo =CONTA.SE(Elenco;Elenco) seguito da Ctrl + Maiusc + Invio ottenendo {=CONTA.SE(Elenco;Elenco)}. Ogni cella conterrà il numero di volte che ogni valore si ripete nel nostro elenco. In sostanza avremo il valore 1 per tutti i valori non duplicati; valori > 1 per quelli duplicati ed eventualmente il valore 0 se la lista contiene celle vuote. È intuitivo che una funzione che ci informa se vi è almeno un valore superiore a 1 in una serie ci completerà il lavoro. Ci viene in aiuto la funzione MAX. Se, infatti, nella cella I2 ( potremmo scegliere qualsiasi altra cella ) scriviamo la formula ordinaria =MAX(H2:H15) otteniamo il valore 2 ( se vi fosse una terza “a” nell’elenco ovviamente otterremmo 3 ). Una formula condizionale che analizza la condizione I2>1 ci informerà dell’esistenza di duplicati nella forma di testo o di formattazione condizionale che sceglieremo ( cella J2 ). La “magia” delle formule matriciali è testimoniata dal fatto che tutto quanto esposto è ottenibile con una sola formula (cella E2 del nostro foglio) : {=SE(MAX(CONTA.SE(Elenco;Elenco))>1;"duplicati presenti";"duplicati assenti")}
del tutto indipendentemente dalle formule precedentemente scritte che, pertanto, si possono
cancellare.

 

Valori Unici o Non Duplicati
Si supponga di avere un elenco di valori denominato Elenco1 ( celle A2:A15) come il seguente

<Intervallo Elenco1 del Foglio di lavoro valori unici 1>

Potremmo essere interessati a conoscere il numero dei valori senza duplicati, cioè quello che si ottiene contando una sola volta valori che eventualmente ricorrono più di una volta, o, se interessa, il numero dei valori unici che si ottiene eliminando dal conteggio completamente i valori che si ripetono. L’utilizzo delle denominazioni “valori unici” e “valori senza duplicati” con il significato esposto è convenzionale; si possono, infatti trovare lavori che con “valori unici” indicano quello che qui indichiamo con “valori senza duplicati”. Una task complementare a quella che individua il numero totale dei valori unici e non duplicati è quella della lista completa dei valori non duplicati. Nel nostro caso, visivamente, notiamo che i valori con completa esclusione di “a” ammontano a 11 e, viceversa ammontano a 12 se “a” è contata una sola volta.

segue..................(leggere il file .doc)

Gli argomenti continuano con la terza parte, dove Elio propone l'utilizzo di matriciali come Funzioni Matriciali definite dall'utente.

File consultabile e scaricabile (2 files)

nome file dimensione
FormuleMatriciali.zip 70  Kb