Recentemente mi sono trovato ad affrontare un piccolo problema su excel che vorrei risolvere insieme a voi.
- Punto di partenza:
- Ho ricevuto, nel giro di pochi giorni, tre email nelle quali ero presente come destinatario o in copia conoscenza,
- Ciascuna mail aveva oltre 50 destinatari e diverse persone per conoscenza,
- Alcuni dei destinatari erano presenti in entrambe le mail e quindi duplicati,
- Alcuni nomi, negli indirizzi, erano racchiusi all'interno di doppi apici mentre altri ne erano sprovvisti
- Obiettivo:
- Ottenere un elenco di nominativi univoco sia di coloro che erano in A: sia in CC: ai quali inviare una mail di recap finale
- Ottenere un elenco filtrabile dove, di volta in volta, vado a spuntare chi mi ha risposto in modo da inviare un kindly remind solo ai restanti astensionisti
Detto in altre parole, dopo aver copiato i destinatari delle precedenti mail nelle celle B1, B2, B3 (vedi immagine sottostante), desidero ottenere i tre elenchi uniti e depurati dei duplicati come si vede nella cella B6. In questo modo, nella colonna a fianco, potrò segnare con una x
ha risposto e, dopo aver filtrato l'elenco, non includerlo tra i destinatari del remind.
Risoluzione
Primo passaggio: dividi, sostituisci e pulisci
Prima di tutto è necessario separare gli indirizzi mail.
Tra un indirizzo ed il successivo, si può vedere un ;
. Il punto e virgola, dunque, può essere utilizzato come placeholder nella funzione TEXTSPLIT
in modo da creare un vettore che contenga, per ogni elemento, un indirizzo.
La funzione si presenta come =TEXTSPLIT(text,col_delimiter,[row_delimiter],[ignore_empty], [match_mode], [pad_with])
e quindi specificando il placeholder come secondo o terzo parametro, il vettore risultante sarà in riga o in colonna. Nel nostro caso, dunque, lasceremo il secondo parametro vuoto e metteremo il punto e virgola come terzo parametro avendo cura di racchiuderlo tra doppi apici perchè si tratta di una stringa:
=TEXTSPLIT(B1;;";")
successivamente, dato che alcuni nominativi sono racchiusi tra virgolette ed altri no, andremmo ad eliminare del tutto i doppi apici con la funzione SUBSTITUTE
che dovrà incapsulare la precedente textsplit:
=SUBSTITUTE(TEXTSPLIT(B1;;";");"""";"")
ed infine incapsulo nuovamente il tutto dentro una TRIM
per eliminare eventuali spazi vuoti all'inizio o alla fine dell'indirizzo mail. La stessa operazione viene fatta per tutti e tre i gruppi di indirizzi mail.
=TRIM(SUBSTITUTE(TEXTSPLIT(B1;;";");"""";""))
=TRIM(SUBSTITUTE(TEXTSPLIT(B2;;";");"""";""))
=TRIM(SUBSTITUTE(TEXTSPLIT(B3;;";");"""";""))
Il risultato sarà il seguente e, come detto, verrà applicato anche al gruppo di indirizzi presenti in B2 e B3:
Secondo passaggio: impila
A questo punto è ora di impilare i tre vettori in uno unico al fine di non avere tre distinti elenchi ma uno soltanto.
Per questo scopo ci viene in aiuto la funzione VSTACK
nella quale, al suo interno, è sufficiente inserire le formule che generano i tre vettori visti nel passaggio precedente.
Mentre digitate la formula, per andare a capo basta premere ALT+INVIO ed ottenere la seguente funzione con il rispettivo risultato in figura:
=VSTACK(
TRIM(SUBSTITUTE(TEXTSPLIT(B1;;";");"""";""));
TRIM(SUBSTITUTE(TEXTSPLIT(B2;;";");"""";""));
TRIM(SUBSTITUTE(TEXTSPLIT(B3;;";");"""";"")))
Terzo passaggio: rendi univoco
Adesso tutti gli indirizzi mail sono perfettamente allineati e confrontabili.
Non ci sono più spazi o virgolette che potrebbero rovinare il confronto.
L'utilizzo, a questo punto, della funzione UNIQUE
ci permette di eliminare i duplicati e fornirci un elenco di elementi univoci come si vede nell'immagine sottostante:
=UNIQUE(
VSTACK(
TRIM(SUBSTITUTE(TEXTSPLIT(B1;;";");"""";""));
TRIM(SUBSTITUTE(TEXTSPLIT(B2;;";");"""";""));
TRIM(SUBSTITUTE(TEXTSPLIT(B3;;";");"""";"")))
)
Quarto passaggio: pulizia finale
L'ultimo passaggio consiste nel togliere <
e >
oltre a sostituire .it
con .it;
L'eliminazione dei simboli di maggiore e minore è utile per la leggibilità: un elenco senza questi simboli risulta più agile nella lettura. Al contrario l'aggiunta di un punto e virgola alla fine degli indirizzi, permette di selezionare tutto l'elenco (o parte di esso dopo averlo filtrato) e metterlo direttamente nel campo A: di una mail permettendo al client di posta di riconoscerli facilmente come destinatari.
Per il primo problema utilizziamo due funzioni: TEXTBEFORE
che prenderà tutto il testo prima di >
e quindi eliminando, di fatto, l'ultimo carattere; successivamente TEXTAFTER
che prenderà tutto il testo dopo <
e quindi di fatto soltanto l'indirizzo mail.
Per il secondo problema andremo ad usare la funzione SUBSTITUTE
sostituendo .it
con .it;
In alternativa si sarebbe potuto utilizzare un CONCAT
concatenando un punto e virgola alla fine del testo ottenuto.
=SUBSTITUTE(
TEXTBEFORE(
TEXTAFTER(
UNIQUE(
VSTACK(
TRIM(SUBSTITUTE(TEXTSPLIT(B1;;";");"""";""));
TRIM(SUBSTITUTE(TEXTSPLIT(B2;;";");"""";""));
TRIM(SUBSTITUTE(TEXTSPLIT(B3;;";");"""";""))));
"<");
">");
".it";".it;")
Razionalizzare
Personalmente amo la razionalizzazione.
La funzione LET
fa al caso nostro. Questa funzione, infatti, permette di dichiarare delle variabili con i rispettivi valori e, come ultimo argomento, la funzione vera e propria.
In questo modo ho scomposto la funzione vista in precedenza in quattro variabili ovvero FirstMail, SecondMail, ThirdMail, simplyList.
A questo punto ho riassemblato di nuovo il tutto in modo molto rapido con la funzione semplificata: SUBSTITUTE(TEXTBEFORE(TEXTAFTER(simplyList;"<");">");".it";".it;")
Il risultato è quanto potete vedere qui sotto:
=LET(
FirstMail;TRIM(SUBSTITUTE(TEXTSPLIT(B1;;";");"""";""));
SecondMail;TRIM(SUBSTITUTE(TEXTSPLIT(B2;;";");"""";""));
ThirdMail;TRIM(SUBSTITUTE(TEXTSPLIT(B3;;";");"""";""));
simplyList;UNIQUE(VSTACK(FirstMail;SecondMail;ThirdMail));
SUBSTITUTE(TEXTBEFORE(TEXTAFTER(simplyList;"<");">");".it";".it;"))
Conclusioni
L'utilizzo di funzioni Excel può risolvere diversi problemi in modo elegante.
Il vantaggio nell'usare una funzione anzichè un copia e un successivo incolla con l'opzione trasponi è indubbiamente la flessibilità e la dinamicità: un domani, infatti, se inserisco o se tolgo un indirizzo mail da uno dei tre elenchi iniziali, il risultato della formula cambia dinamicamente mentre un copia/incolla-trasposto dovrà essere rifatto manualmente.
Spesso gli utenti alle prime armi preferiscono la seconda opzione perchè, benchè sia più laboriosa è indubbiamente più semplice.
Tuttavia il problema è sempre l'orizzonte temporale e la complessità: a mano a mano che la complessità del documento sul quale si sta lavorando aumenta, gli automatismi diventano sempre più importanti e aiutano a limitare gli errori operativi e manuali.
Mano a mano che il tempo passa, le probabilità di dimenticarsi un passaggio fondamentale che non si è automatizzato con una formula, aumentano.
Vale la pena, dunque, investire un po' di tempo iniziale per non rischiare di perderne infinitamente di più in futuro per capire dove stia l'errore. Sempre che... l'errore venga notato prima da noi e non dai nostri clienti o dal nostro direttore generale.
Immagine di copertina generata con Canva AI - licenza con permesso di utilizzo citando la fonte