Combinando le prime due lettere del nome e le prime due lettere del cognome


9

Ho un foglio di lavoro con nomi utente.

Il nome e il cognome si trovano nella stessa cella della colonna A.

Esiste una formula che concatena le prime due lettere del nome (prima parola) e le prime due lettere del cognome (seconda parola)?

Ad esempio John Doe, dovrebbe diventare JoDo.

Provai

=LEFT(A1)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,IFERROR(FIND(" ",SUBSTITUTE(A1," ","",1)),LEN(A1))-IFERROR(FIND(" ",A1),LEN(A1)))

ma questo mi dà JoDoeil risultato.



Qualcuno delle risposte fa il trucco? (In tal caso, puoi contrassegnarlo come La risposta facendo clic sul segno di spunta a sinistra del post.)
BruceWayne,

Risposte:


15

Sì; supponendo che ogni persona abbia solo un nome e un cognome, e questo è sempre separato da uno spazio che puoi usare sotto:

=LEFT(A1,2)&MID(A1,SEARCH(" ",A1)+1,2)

Potrei basare questa risposta solo su questi presupposti in quanto è tutto ciò che hai fornito.

O se vuoi che sia ancora incluso uno spazio:

=LEFT(A1,2)&" "&MID(A1,SEARCH(" ",A1)+1,2)

2
@prweq no probs, accettalo come corretto se funziona per te
PeterH

Soluzione più semplice e facile da capire. (Bene, tranne che per l'uso FIND()invece di SEARCH();-)) Dato che stai assumendo che ci sia sempre un separatore di spazio, la tua seconda formula può essere semplificata in=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
robinCTS

4
@RajeshS Lo so. Ecco perché la mia risposta inizia conassuming each person only has a First and Last name
PeterH,

2
I programmatori di falsi credono nei nomi ; non che avrebbe senso gestire tutti quei casi fin dall'inizio se il tuo software non ha una portata internazionale
Aaron

1
Suggerisco TRIM(LEFT(A1,2))nel caso in cui il loro nome contenga solo una lettera, ma potrebbe essere abbastanza facile controllare anche manualmente quei casi speciali.
Ingegnere Toast,

11

E per concludere, ecco una soluzione che restituirà i primi due caratteri del nome e i primi due caratteri del cognome, ma tiene conto anche dei secondi nomi.

=LEFT(A1,2)&LEFT(MID(A1,FIND("~~~~~",SUBSTITUTE(A1," ","~~~~~",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+1,LEN(A1)),2)

inserisci qui la descrizione dell'immagine

Grazie a @Kyle per la parte principale della formula


1
Mi hai battuto ;-) (Era mezzanotte passata e ho bisogno di dormire - stavo pianificando di aggiungere questo alla mia risposta in seguito.) Un leggero miglioramento alla tua formula sarebbe di usare un singolo ~invece di quattro. Se temi che una Tilda possa essere usata come parte di un nome (!) O, più probabilmente, digitata per errore, usa un carattere che non appare su nessuna tastiera. Preferisco usare §. è un altro buono.
robinCTS,

@BruceWayne ,, la tua formula è più competente ,,, poiché accede solo ai primi e il cognome ignora il secondo nome ,,, Voto votato ☺
Rajesh S

@RajeshS Che dire delle persone con nomi spagnoli , come l'ex pilota di F1 Fernando Alonso Díaz che ha 1 nome, 2 cognomi e nessun secondo nome? (O anche il re Felipe Juan Pablo Alfonso de Todos los Santos de Borbón y de Grecia ?)
Chronocidal

2
@Chronocidal ora stiamo andando nella tana del coniglio di ciò che i programmatori credono sui nomi
BruceWayne,

1
@robinCTS - Buona chiamata! Ho preso la formula da un'altra risposta (modificata in) e non ho davvero scavato troppo in profondità. Grazie per i suggerimenti!
BruceWayne,

9

Questo è un altro modo ...

Schermata del foglio di lavoro

  • Un nome
  • B - =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))

Potresti andare ancora oltre e rimuovere tutte quelle colonne extra =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
unendole

Sì, l'ho fatto pochi istanti dopo!
Stese,

sì, ho notato che hai modificato la risposta, bella risposta!
PeterH,

5

Prima di tutto, vorrei dire che la risposta di PeterH è la più semplice e facile da capire. (Anche se la mia preferenza è usare FIND()invece di SEARCH()- digitare due caratteri in meno aiuta a evitare la RSI ;-))

Una risposta alternativa che né usi MID(), LEFT()RIGHT(), ma utilizza invece REPLACE()per rimuovere le parti indesiderate del nome è il seguente:

=REPLACE(REPLACE(A1,FIND(" ",A1)+3,LEN(A1),""),3,FIND(" ",A1)-2,"")

Spiegazione:

L'interno REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")rimuove i caratteri dal terzo carattere del cognome in poi, mentre l'esterno rimuove i caratteri dal terzo carattere del nome fino allo spazio incluso.REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")


Addendum 1:

La formula sopra può anche essere adattata per consentire un solo secondo nome:

=REPLACE(REPLACE(A1,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))+3,LEN(A1),""),3,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))-2,"")

sostituendo FIND(" ",A1)con IFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1)).

FIND(" ", A1, FIND(" ",A1)+1)trova il secondo spazio (avviando la ricerca dello spazio dopo il primo spazio) o errori in caso contrario. trova il primo spazio se non esiste un secondo spazio.
IFERROR(find_second_space, FIND(" ",A1))


Questa versione (prolissa) consente un numero qualsiasi di secondi nomi:

=REPLACE(REPLACE(A1,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+3,LEN(A1),""),3,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))-2,"")

In questo caso FIND(" ",A1)viene sostituito con FIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))).

LEN(A1)-LEN(SUBSTITUTE(A1," ",""))conta il numero di spazi. sostituisce l'ultimo spazio con . trova il primo che equivale a trovare l'ultimo spazio.
SUBSTITUTE(A1, " ", "§", count_of_spaces)§
FIND("§", last_space_replaced_string)§

( §Naturalmente, potrebbe essere sostituito con qualsiasi carattere garantito che non esista nella stringa del nome completo. Un'alternativa più generale e più sicura sarebbe usare CHAR(1).)


Si noti che, naturalmente, la risposta di BruceWayne è la soluzione più semplice e facile da comprendere che consente un numero qualsiasi di secondi nomi. Bene lo era. Fino a quando ho pubblicato la mia altra risposta , cioè ;-)


Addendum 2:

Tutte le soluzioni possono essere adattate per soddisfare il caso di un solo nome (se esiste un requisito per un risultato di quattro caratteri) avvolgendole all'interno di una IFERROR()funzione in questo modo:

=IFERROR(solution, alternate_formula)

Si noti che quanto sopra è una formula di caso generale e potrebbe essere possibile apportare una modifica più efficiente a una soluzione specifica. Ad esempio, se il requisito nel caso di un singolo nome è di unire le prime due lettere con le ultime due lettere, la risposta di PeterH può essere adattata in modo più efficiente in questo modo:

=LEFT(A1,2)&MID(A1,IFERROR(SEARCH(" ",A1)+1,LEN(A1)-1),2)


Per consentire il caso di un nome di una sola lettera o di un iniziale (supponendo che uno spazio o un punto non sia accettabile come secondo carattere), è possibile utilizzare quanto segue con qualsiasi soluzione:

=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))

Si noti che il singolo carattere può essere codificato o calcolato dal nome. (Oppure utilizzare ""per rimuovere lo spazio o il punto.)


Infine, se hai davvero bisogno di soddisfare il caso in cui il nome completo è solo un singolo carattere (!), Basta avvolgere la formula con un solo nome con un altroIFERROR() . (Supponendo, ovviamente, che la formula alternativa non si occupi di quel caso speciale.)


Addendum 3:

Infine, infine (no, davvero * ;-)) per soddisfare più spazi consecutivi e / o iniziali / finali, utilizzare TRIM(A1)invece di A1.


* Lascerò il caso di un solo cognome, come Mr T, come esercizio per il lettore.

Suggerimento: =solution &IF(MID(A1,LEN(A1)-1,1)=" ", single_char, "")


1
Come sempre le tue risposte sembrano provenire da una guida utente avanzata di Excel! Questa sarebbe la risposta più votata se l'avessi postata in precedenza!
PeterH,

@PeterH Grazie per il complemento. Mi sono imbattuto nella domanda solo una volta che ha colpito l'elenco delle domande sulla rete calda, quindi ero un po 'in ritardo alla festa ;-)
robinCTS

2

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.