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 JoDoe
como resultado.
Respuestas:
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:
Solo podría basar esta respuesta en esas suposiciones, ya que es todo lo que proporcionó.
O si desea que se incluya un espacio:
fuente
FIND()
lugar deSEARCH()
;-)) 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)
assuming each person only has a First and Last name
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.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.
Gracias a @Kyle por la parte principal de la fórmula.
fuente
~
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.Esta es otra forma ...
=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
fuente
=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
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 deSEARCH()
- escribir dos caracteres menos ayuda a evitar RSI ;-))Una respuesta alternativa que ni los usos
MID()
,LEFT()
ni tampocoRIGHT()
, sino que utilizaREPLACE()
para eliminar las partes no deseadas del nombre es la siguiente: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:
reemplazando
FIND(" ",A1)
conIFERROR(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:
En este caso
FIND(" ",A1)
se reemplaza conFIND("§", 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 generalCHAR(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:
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 deA1
.* Dejaré el caso para una sola letra apellido, como el Sr. T, como un ejercicio para el lector.
fuente
Según esta respuesta , aquí hay una solución elegante que funciona con cualquier número de segundo nombre:
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 decirA1
, conTRIM(A1)
. Los espacios iniciales y múltiples espacios consecutivos entre palabras se manejan correctamente solo conA1
.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í:
Para comprender cómo funciona, primero mire lo que sucede cuando
A1
no contiene espacios (es decir, contiene un solo nombre). Todas lasIFERROR()
funciones evalúan sus segundos argumentos, ya queFIND()
devuelve un#VALUE!
error si la cadena de búsqueda no se encuentra en la cadena de destino: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, yaFIND(" ", SUBSTITUTE(A1," ","",1))
que intenta encontrar otro espacio después de eliminar el primero, y solo uno: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: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 laMID()
salida:La simplificación que mencioné anteriormente es reemplazar
LEFT(MID(…,…,…), 2)
conMID(…,…,2)
:o en una línea:
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.
fuente