martes, 22 de noviembre de 2022

LAMBDA: Nombres y apellidos

Releyendo algún viejo artículo me saltó a la cabeza la idea de optimizar, empleando las funciones LAMBDA, la formulación que planteé hace tiempo para separar efectivamente los nombres y apellidos compuestos en las tres partes correspondientes: Nombre + Apellido 1 + Apellido 2
En su momento publiqué distintas alternativas con macros aquí y con Power Query aquí.

Siguiendo exactamente la misma lógica que en los artículos previos llegué a este resultado:
LAMBDA: Nombres y apellidos


Y aquí la formula...
=LET(cadena;REDUCE(NOMPROPIO(UNIRCADENAS("| ";;DIVIDIRTEXTO(B2;;" ")));Tabla1[esto];LAMBDA(ac;esto;SUSTITUIR(ac;esto;DESREF(esto;0;1))));
partido;DIVIDIRTEXTO(cadena;"|");
conteo;CONTARA(DIVIDIRTEXTO(cadena;"|"));
primer;SI.ERROR(INDICE(partido;1);"");
sdo;SI.ERROR(INDICE(partido;2);"");
tro;SI.ERROR(INDICE(partido;3);"");
cto;SI.ERROR(INDICE(partido;4);"");
SI(conteo>3;
APILARH(primer&" "&sdo;tro;cto);
APILARH(primer;sdo;tro)))


Con idéntico razonamiento, nos apoyamos en la tabla auxiliar de reemplazamientos, que nos permitirá diferenciar las partes de cada nombre completo.
La función REDUCE se encarga del reemplazamiento de estas palabras auxiliares de manera recurrente, sustituyendo las distintas partes en que hemos separado el nombre con la función DIVIDIRTEXTO.
La función INDICE se encarga de recuperar las posibles cuatro partes, para finalmente recomponer un vector con el nombre y dos apellidos usando otra función mágica como es APILARH.

Increible como estas funciones de Excel nos permiten recontruir estructuras de programación pero con un perfil programador mínimo!!!.
Esto es el futuro de Excel.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.