Combinando las dos primeras letras del primer nombre y las dos primeras letras del apellido

9

Tengo una hoja de cálculo de nombres de usuario.

Los nombres y apellidos están en la misma celda de la columna A.

¿Existe una fórmula que concatene las dos primeras letras del primer nombre (primera palabra) y las dos primeras letras del apellido (segunda palabra)?

Por ejemplo John Doe, debería convertirse JoDo.

Lo intenté

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

pero esto me da JoDoecomo resultado.

prweq
fuente
2
Lectura esencial: los programadores de falsedades creen en los nombres
StackOverthrow
¿Alguna de las respuestas hace el truco? (Si es así, ¿puede marcarlo como La respuesta haciendo clic en la marca de verificación a la izquierda de la publicación.)
BruceWayne

Respuestas:

15

Si; suponiendo que cada persona solo tenga un Nombre y un Apellido, y esto siempre está separado por un espacio que puede usar a continuación:

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

Solo podría basar esta respuesta en esas suposiciones, ya que es todo lo que proporcionó.

O si desea que se incluya un espacio:

=LEFT(A1,2)&" "&MID(A1,SEARCH(" ",A1)+1,2)
PeterH
fuente
2
@prweq sin problemas, acéptelo como correcto si funciona para usted
PeterH
La solución más simple y fácil de entender. (Bueno, excepto para usar en FIND()lugar de SEARCH();-)) Dado que está asumiendo que siempre hay un separador de espacio, su segunda fórmula se puede simplificar a=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
robinCTS
44
@RajeshS lo sé. Es por eso que mi respuesta se inicia conassuming each person only has a First and Last name
PeterH
2
Los programadores de falsedades creen en los nombres ; no es que tenga sentido manejar todos esos casos desde el primer momento si su software no tiene alcance internacional
Aaron
1
Sugiero TRIM(LEFT(A1,2))solo en caso de que su nombre solo tenga una letra, pero también puede ser bastante fácil verificar esos casos especiales manualmente.
Engineer Toast
11

Y para redondear las cosas, aquí hay una solución que devolverá los dos primeros caracteres del primer nombre y los dos primeros caracteres del apellido, pero también representa los segundos nombres.

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

ingrese la descripción de la imagen aquí

Gracias a @Kyle por la parte principal de la fórmula.

Bruce Wayne
fuente
1
Me ganaste ;-) (Era pasada la medianoche y necesito dormir, estaba planeando agregar esto a mi respuesta después). Una ligera mejora en tu fórmula sería usar una sola en ~lugar de cuatro. Si le preocupa que una Tilda se pueda usar como parte de un nombre (!) O, más probablemente, se haya escrito accidentalmente, simplemente use un carácter que no aparezca en ningún teclado. Yo prefiero usar §. Es otra buena.
robinCTS
@BruceWayne ,, tu Fórmula es más competente ,,, ya que solo está accediendo a Firts & Apellido ignora el segundo nombre ,,, Votado ☺
Rajesh S
@RajeshS ¿Qué pasa con las personas con nombres españoles , como el ex piloto de F1 Fernando Alonso Díaz que tiene 1 nombre, 2 apellidos y ningún segundo nombre? (¿O incluso el rey Felipe Juan Pablo Alfonso de Todos los Santos de Borbón y de Grecia ?)
Chronocidal
2
@Chronocidal ahora vamos por el agujero del conejo de lo que los programadores creen sobre los nombres
BruceWayne
1
@robinCTS - ¡Buena llamada! Obtuve la fórmula de otra respuesta (editada), y realmente no profundicé demasiado. ¡Gracias por los consejos!
BruceWayne
9

Esta es otra forma ...

Captura de pantalla de la hoja de trabajo

  • Un nombre
  • B - =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
Stese
fuente
Podría ir aún más lejos y eliminar todas esas columnas adicionales fusionándolas=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
PeterH
¡Sí, lo hice unos momentos después!
Stese
Sí, noté que editaste la respuesta, ¡Buena respuesta!
PeterH
5

En primer lugar, me gustaría decir que la respuesta de PeterH es la más simple y fácil de entender. (Aunque mi preferencia es usar en FIND()lugar de SEARCH()- escribir dos caracteres menos ayuda a evitar RSI ;-))

Una respuesta alternativa que ni los usos MID(), LEFT()ni tampoco RIGHT(), sino que utiliza REPLACE()para eliminar las partes no deseadas del nombre es la siguiente:

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

Explicación:

El interior REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")elimina los caracteres del tercer carácter del apellido en adelante, mientras que el exterior elimina los caracteres del tercer carácter del nombre hasta el espacio incluido.REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")


Anexo 1:

La fórmula anterior también se puede adaptar para permitir un solo segundo nombre:

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

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

FIND(" ", A1, FIND(" ",A1)+1)encuentra el segundo espacio (iniciando la búsqueda del espacio después del primer espacio) o errores en caso contrario. encuentra el primer espacio si no hay un segundo espacio.
IFERROR(find_second_space, FIND(" ",A1))


Esta versión (de largo aliento) permite cualquier número de segundos nombres:

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

En este caso FIND(" ",A1)se reemplaza con FIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))).

LEN(A1)-LEN(SUBSTITUTE(A1," ",""))cuenta la cantidad de espacios. reemplaza el último espacio con . encuentra el primero, que es lo mismo que encontrar el último espacio.
SUBSTITUTE(A1, " ", "§", count_of_spaces)§
FIND("§", last_space_replaced_string)§

( §Podría, por supuesto, ser reemplazado por cualquier carácter que se garantice que no exista en la cadena de nombre completo. Sería una alternativa más segura y más general CHAR(1)).


Tenga en cuenta que, por supuesto, la respuesta de BruceWayne es la solución más simple y fácil de entender que permite cualquier número de segundo nombre. Pues lo fue. Hasta que publiqué mi otra respuesta , es ;-)


Anexo 2:

Todas las soluciones se pueden adaptar para atender solo el caso de un solo nombre (si hay un requisito para un resultado de cuatro caracteres) envolviéndolos dentro de una IFERROR()función como esta:

=IFERROR(solution, alternate_formula)

Tenga en cuenta que lo anterior es una fórmula de caso general, y podría ser posible realizar una modificación más eficiente a una solución específica. Por ejemplo, si el requisito en el caso de un solo nombre es unir las dos primeras letras con las dos últimas letras, la respuesta de PeterH puede adaptarse de manera más eficiente de esta manera:

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


Para permitir el caso del primer nombre de una letra o una inicial (suponiendo que un espacio o punto no sea aceptable como segundo carácter), se puede usar lo siguiente con cualquier solución:

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

Tenga en cuenta que el carácter individual se puede codificar o calcular a partir del nombre. (O use ""para eliminar el espacio o punto).


Finalmente, si realmente necesita atender el caso en el que el nombre completo es un solo carácter (!), Simplemente envuelva la fórmula de solo nombre con otro IFERROR() . (Suponiendo, por supuesto, que la fórmula alternativa no se ocupa de ese caso especial).


Anexo 3:

Finalmente, finalmente (no, realmente * ;-)) para atender múltiples espacios consecutivos y / o iniciales / finales, use en TRIM(A1)lugar de A1.


* Dejaré el caso para una sola letra apellido, como el Sr. T, como un ejercicio para el lector.

Insinuación: =solution &IF(MID(A1,LEN(A1)-1,1)=" ", single_char, "")

robinCTS
fuente
1
¡Como siempre, sus respuestas parecen ser de una guía de usuario avanzada de Excel! ¡Esta sería la respuesta más votada si la hubiera publicado antes!
PeterH
@ PeterH Gracias por el complemento. Solo me topé con la pregunta una vez que llegó a la lista de preguntas de Hot Network, así que llegué un poco tarde a la fiesta ;-)
robinCTS
2

Según esta respuesta , aquí hay una solución elegante que funciona con cualquier número de segundo nombre:

=LEFT(A1,2)&LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1))),2)

Explicación:

SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))reemplaza los espacios entre palabras con espacios iguales en número a la longitud de toda la cadena. El uso de la longitud de la cadena en lugar de un número arbitrariamente grande garantiza que la fórmula funcione para cualquier cadena de longitud y significa que lo hace de manera eficiente.

RIGHT(space_expanded_string, LEN(A1))extrae la palabra más a la derecha precedida por un montón de espacios. * *

TRIM(space_prepended_rightmost_word) extrae la palabra más a la derecha.

LEFT(rightmost_word, 2) extrae los dos primeros caracteres de la palabra más a la derecha (apellido).


* Advertencia: si es posible que un nombre de usuario contenga espacios finales, debe reemplazar el primer argumento de SUBSTITUTE(), es decir A1, con TRIM(A1). Los espacios iniciales y múltiples espacios consecutivos entre palabras se manejan correctamente solo con A1.


Arreglando su intento

Echando un vistazo más de cerca a su intento de solución, parece que estaba muy cerca de una fórmula de trabajo para concatenar las dos primeras letras de la primera palabra (es decir, el primer nombre) y las dos primeras letras de la segunda palabra si existiera.

Tenga en cuenta que si un nombre de usuario contiene segundos nombres, la fórmula corregida tomaría incorrectamente las dos primeras letras del primer segundo nombre en lugar del apellido (suponiendo que su intención sea extraerlas del apellido).

Además, si todos los nombres de usuario consisten solo en un nombre, o un nombre y un apellido, entonces la fórmula es innecesariamente complicada y se puede simplificar.


Para ver cómo funciona la fórmula y así solucionarla, es más fácil si está prettified, así:

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


Para comprender cómo funciona, primero mire lo que sucede cuando A1no contiene espacios (es decir, contiene un solo nombre). Todas las IFERROR()funciones evalúan sus segundos argumentos, ya que FIND()devuelve un #VALUE!error si la cadena de búsqueda no se encuentra en la cadena de destino:

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

El tercer argumento de MID()evalúa a cero, por lo que las salidas de la función ""y el resultado de la fórmula son los dos primeros caracteres del nombre único.


Ahora observe cuándo hay exactamente dos nombres (es decir, hay exactamente un espacio). La primera y la tercera IFERROR()función evalúan sus primeros argumentos, pero la segunda evalúa su segundo argumento, ya FIND(" ", SUBSTITUTE(A1," ","",1))que intenta encontrar otro espacio después de eliminar el primero, y solo uno:

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

Claramente, MID()devuelve la segunda palabra (es decir, el apellido) en su totalidad, y el resultado de la fórmula son los dos primeros caracteres del nombre seguido de todos los caracteres del apellido.


Para completar, también veremos el caso donde hay al menos tres nombres, aunque ahora debería ser bastante obvio cómo solucionar la fórmula. Esta vez, todas las IFERROR()funciones evalúan sus primeros argumentos:

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

Es un poco menos claro que en el caso anterior, pero MID()devuelve exactamente la segunda palabra completa (es decir, el primer segundo nombre). Por lo tanto, el resultado de la fórmula son los dos primeros caracteres del primer nombre seguidos de todos los caracteres del primer segundo nombre.


Obviamente, la solución es usar LEFT()para obtener los dos primeros caracteres de la MID()salida:

=
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 simplificación que mencioné anteriormente es reemplazar LEFT(MID(…,…,…), 2)con MID(…,…,2):

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

o en una línea:

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

Esta es esencialmente la solución de PeterH modificada para que también funcione con nombres únicos (en cuyo caso, el resultado son solo los dos primeros caracteres del nombre).


Nota: Las fórmulas prettificadas realmente funcionan si se ingresan.

robinCTS
fuente