Separiamo nome da cognome: ovvero splittare (spaccare, separare) stringhe di testo.

utilizzo delle funzioni : DESTRA(), SINISTRA(), LUNGHEZZA(), TROVA(), STRINGA.ESTRAI()

Può necessitare, disponendo di valori stringa, posti in una cella, di volerli separare, e di ottenere le parti separate, in celle adiacenti; l'esempio più classico è quello di avere nome e cognome (o viceversa) posti in una cella (la A1 ad esempio), e di voler separare il nome dal cognome, inserendoli in altre due celle, stessa riga; per intenderci, vogliamo questo:

  A B C

1

 Armando Dozzina  Armando  Dozzina

Quando si lavora con stringhe di testo, dobbiamo tenere presente che per identificare parti della stringa, dovremo sapere che "posizione" occupa, o da quale "posizione" inizia o termina, la parte della stringa che ci interessa nell'intera stringa; infatti le funzioni citate sopra prevedono che uno degli argomenti si riferisca appunto ad una "posizione". Vediamo le sintassi delle funzioni da usare per le nostre avventure:

  • DESTRA(testo;numerocaratteri) - restituisce la parte di stringa compresa tra la fine della stringa (da destra, appunto) e la posizione rappresentata dal numero di caratteri andando verso sinistra; es. in A20 abbiamo la parola "Felicità"; se impostiamo la formula:  =DESTRA(A20;4) otteniamo "cità".  (la funzione corrisponde alla funzione VBA: RIGHT())

  • SINISTRA(testo;numerocaratteri) - restituisce la parte di stringa compresa tra l'inizio della stringa (da sinistra, appunto) e la posizione rappresentata dal numero di caratteri andando verso destra; es. in A20 abbiamo la parola "Felicità"; se impostiamo la formula:  =SINISTRA(A20;4) otteniamo "Feli". (la funzione corrisponde alla funzione VBA: LEFT())

  • LUNGHEZZA(testo) - restituisce il numero di caratteri che formano una stringa, attenzione: compresi spazi vuoti iniziali, intermedi o finali), con l'esempio sopra, la formula =LUNGHEZZA(A20) restituisce 8. (la funzione corrisponde alla funzione VBA: LEN())

  • TROVA(testo;stringa;inizio) - ricerca una stringa di testo (testo) all'interno di un'altra stringa (stringa) e restituisce un numero corrispondente alla posizione iniziale di stringa a partire dal primo carattere (quindi da sinistra) di testo. La funzione TROVA distingue la maiuscole dalle minuscole e non riconosce i caratteri jolly. Con la stringa in A20, se impostiamo la formula:  =Trova("i";A20;1) otteniamo in restituzione 4, che è infatti la posizione della prima lettera "i" all'interno di "Felicità", iniziando da sinistra. (la funzione corrisponde alla funzione VBA: InStr())

  • STRINGA.ESTRAI(testo;inizio;numerocaratteri) - restituisce un numero specifico di caratteri di una stringa di testo a partire dalla posizione specificata, in base al numero di caratteri. Con la stringa in A20, se vogliamo estrarre la stringa "lici", avremo che "l" inizia in terza posizione, quindi 3 come inizio, e 4 sono i caratteri che compongono la parte da estrarre, quindi la formula sarà: =STRINGA.ESTRAI(A20;3;4) ed otterremo "lici". (la funzione corrisponde alla funzione VBA: MID())

Bene, visto come lavorano le funzioni, ritorniamo al nostro esercizio, quello di separare nome dal cognome, e visto che potremo non sapere da quanti caratteri sono formati le stringhe "nome" e "cognome" (se varia un nominativo nella nostra cella A1, avremo bisogno di adattare le differenti "posizioni" delle stringhe), cercheremo il primo spazio vuoto che in genere si lascia tra nome e cognome tramite la funzione TROVA(), ed useremo il valore restituito dalla funzione come secondo argomento delle funzioni SINISTRA() che restituirà "Armando" e lo stesso faremo con la funzione DESTRA() che restituirà "Dozzina"; quindi in B1 scriveremo:

  • =SINISTRA(A1;TROVA(" ";A1;1)) per ottenere "Armando" - infatti con TROVA(" ";A1;1) viene cercato il primo spazio vuoto nella cella A1, iniziando dal 1 carattere, ed otterremo 8, che rappresenta il "numerocaratteri" da usare come secondo argomento nella funzione SINISTRA(),  e che equivale ad avere scritto la formula =SINISTRA(A1;8).

Discorso diverso facciamo per ottenere il cognome: iniziamo da destra, sottraiamo alla lunghezza totale della stringa in A1, la posizione ottenuta con Trova del primo spazio vuoto, imposteremo questa formula in C1:

  • =DESTRA(A1;LUNGHEZZA(A1)-TROVA(" ";A1;1)) ed otterremo "Dozzina"

Già, qualcuno dirà, e se il nominativo è formato da un nome e due cognomi, e vogliamo separare anche i cognomi uno dall'altro? Se in A1 abbiamo una stringa come "Elena Ricci Guastalli" ? La soluzione non è difficile, ma solo un pò più lunghetta e dovremo usare altre due funzioni per "isolare" ed estrarre la parte centrale della stringa, corrispondente al primo dei due cognomi ("Ricci"): vediamo subito la formula, poi la esaminiamo:

  • Soluzione proposta dal lettore Scirè Salvatore  salvatore.scire<at>fastwebnet.it   (la mia precedente soluzione non era corretta) per "estrarre" il secondo nome/cognome

  • =STRINGA.ESTRAI(A1;TROVA(" ";A1;1)+1;TROVA(" ";A1;TROVA(" ";A1;1)+1)-TROVA(" ";A1;1))

In pratica dobbiamo "isolare" la parte della stringa che si trova tra i due spazi vuoti: usiamo la funzione STRINGA.ESTRAI() che richiede, oltre all'argomento quale stringa prendere in esame (in A1), la posizione iniziale del testo da individuare, e il numero di caratteri da prendere; quindi cerchiamo il secondo spazio vuoto sottraendone il primo spazio vuoto e per differenza otteniamo il secondo nome

  A B C D

1

Elena Ricci Guastalli Elena Ricci Guastalli

in questo caso avremo:

  • in B1 la formula  :   =SINISTRA(A1;TROVA(" ";A1;1))

  • in C1 la formula  :   =STRINGA.ESTRAI(A1;TROVA(" ";A1;1)+1;TROVA(" ";A1;TROVA(" ";A1;1)+1)-TROVA(" ";A1;1))

  • in D1 la formula  :   =DESTRA(A1;LUNGHEZZA(A1)-(LUNGHEZZA(B1)+LUNGHEZZA(C1)))

Questo tanto per abituarci all'impiego di funzioni per la gestione di stringhe di testo, ma ce ne sono altre. Non sarebbe male, per evitare di ottenere risultati inesatti, usare la funzione ANNULLA.SPAZI(), come "guscio" esterno alle formule viste sopra, per eliminare gli eventuali spazi vuoti iniziali e finali di una stringa; infatti la funzione NON elimina spazi intermedi dalle stringhe, rendendo più precisa la loro ricerca. Tanto per capirci, una formula andrebbe così modificata:

  • =ANNULLA.SPAZI(SINISTRA(A1;TROVA(" ";A1;1)))

Io non amo tanto scrivere formule chilometriche, per questo consiglio di usare il VBA, ma non tutti sono d'accordo.....

P.S.: il separatore considerato negli esempi della Funzione TROVA() come primo argomento, è uno spazio vuoto, quindi tra due doppi apici; se si dispone di stringhe il cui separatore è una virgola, o altro, basta modificare il testo da trovare così:  "," (una virgola tra doppi apici).

 

Buon lavoro.

prelevato sul sito www.ennius.altervista.org