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 A1
no 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.