Sulla base di questa risposta , ecco una soluzione elegante che funziona con qualsiasi numero di secondi nomi:
=LEFT(A1,2)&LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1))),2)
Spiegazione:
SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))
sostituisce gli spazi tra parole con spazi uguali in numero alla lunghezza dell'intera stringa. L'uso della lunghezza della stringa anziché di un numero arbitrariamente grande garantisce che la formula funzioni per qualsiasi stringa di lunghezza e significa che lo fa in modo efficiente.
RIGHT(space_expanded_string, LEN(A1))
estrae la parola più a destra preceduta da un mucchio di spazi. *
TRIM(space_prepended_rightmost_word)
estrae la parola più a destra.
LEFT(rightmost_word, 2)
estrae i primi due caratteri della parola più a destra (cognome).
* Avvertenza: se è possibile che un nome utente contenga spazi finali, è necessario sostituire il primo argomento di SUBSTITUTE()
, ad esempio A1
, con TRIM(A1)
. Gli spazi iniziali e più spazi consecutivi tra le parole sono gestiti correttamente solo con A1
.
Risolvere il tuo tentativo
Dando un'occhiata più da vicino alla tua tentata soluzione, sembra che tu fossi molto vicino a una formula funzionante per concatenare le prime due lettere della prima parola (cioè il primo nome) e le prime due lettere della seconda parola, se esistesse.
Nota che se un nome utente dovesse contenere nomi secondari, la formula corretta catturerebbe erroneamente le prime due lettere dal primo secondo nome anziché dal cognome (supponendo che il tuo intento sia effettivamente quello di estrarle dal cognome).
Inoltre, se tutti i nomi utente sono costituiti solo da un nome o da un nome e un cognome, la formula è inutilmente complicata e può essere semplificata.
Per vedere come funziona la formula e quindi correggerla, è più facile se è preimpostata, in questo modo:
=
LEFT(A1,2) &
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
IFERROR(
FIND(" ", SUBSTITUTE(A1," ","",1)),
LEN(A1)
)
- IFERROR(FIND(" ",A1), LEN(A1))
)
Per capire come funziona, prima guarda cosa succede quando A1
non contiene spazi (ovvero contiene un solo nome). Tutte le IFERROR()
funzioni FIND()
restituiscono i loro secondi argomenti poiché restituiscono un #VALUE!
errore se la stringa di ricerca non viene trovata nella stringa di destinazione:
=
LEFT(A1,2) &
MID(
A1,
LEN(A1) + 1,
LEN(A1)
-LEN(A1)
)
Il terzo argomento di viene MID()
valutato a zero, quindi la funzione restituisce ""
e il risultato della formula sono i primi due caratteri del singolo nome.
Ora guarda quando ci sono esattamente due nomi (cioè c'è esattamente uno spazio). La prima e la terza IFERROR()
funzione valutano i loro primi argomenti, ma la seconda valuta il secondo argomento poiché FIND(" ", SUBSTITUTE(A1," ","",1))
sta cercando di trovare un altro spazio dopo aver rimosso il primo, e unico, uno:
=
LEFT(A1,2) &
MID(
A1,
FIND(" ",A1) + 1,
LEN(A1)
- FIND(" ",A1)
)
Chiaramente, MID()
restituisce la seconda parola (cioè il cognome) nella sua interezza, e il risultato della formula sono i primi due caratteri del nome seguito da tutti i caratteri del cognome.
Per completezza, esamineremo anche il caso in cui ci sono almeno tre nomi, anche se ora dovrebbe essere abbastanza ovvio come correggere la formula. Questa volta, tutte le IFERROR()
funzioni valutano i loro primi argomenti:
=
LEFT(A1,2) &
MID(
A1,
FIND(" ",A1) + 1,
FIND(" ", SUBSTITUTE(A1," ","",1))
- FIND(" ",A1)
)
È leggermente meno chiaro di quanto non fosse nel caso precedente, ma MID()
restituisce esattamente l'intera seconda parola (ovvero il secondo nome). Pertanto, il risultato della formula sono i primi due caratteri del primo nome seguito da tutti i caratteri del primo secondo nome.
Ovviamente, la correzione è da usare LEFT()
per ottenere i primi due caratteri MID()
dell'output:
=
LEFT(A1,2) &
LEFT(
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
IFERROR(
FIND(" ", SUBSTITUTE(A1," ","",1)),
LEN(A1)
)
- IFERROR(FIND(" ",A1), LEN(A1))
),
2
)
La semplificazione che ho menzionato sopra è di sostituire LEFT(MID(…,…,…), 2)
con MID(…,…,2)
:
=
LEFT(A1,2) &
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
2
)
o su una riga:
=LEFT(A1,2)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,2)
Questa è essenzialmente la soluzione di PeterH modificata per funzionare anche con nomi singoli (nel qual caso, il risultato sono solo i primi due caratteri del nome).
Nota: le formule predefinite funzionano effettivamente se inserite.