Reto de agrupación y pivotado: AGRUPARPOR vs ARCHIVOMAKEARRAY vs MAP
Leandro trae un reto de internet al grupo: a partir de una tabla con claves repetidas y valores, generar una tabla pivotada donde cada clave aparezca una vez y los valores se concatenen. La comunidad responde con un festival de enfoques.
Con AGRUPARPOR directo (Leo): la solución más limpia. Agrupa por clave y aplica UNIRCADENAS como función de agregación:
``
=AGRUPARPOR(
APILARV(UNICOS(claves); claves);
valores;
LAMBDA(x; UNIRCADENAS(", ";; x));;
0
)
`
Con AJUSTARFILAS + COINCIDIRX + ARCHIVOMAKEARRAY (John): enfoque completamente distinto que construye la tabla resultado celda a celda con ARCHIVOMAKEARRAY:
`
=LET(
u; UNICOS(claves);
n; MAX(CONTAR.SI(claves; u));
ARCHIVOMAKEARRAY(FILAS(u); n; LAMBDA(i; j;
SI.ND(INDICE(
FILTRAR(valores; claves = INDICE(u; i));
j
); "")
))
)
`
Con MAP + SECUENCIA + UNIRCADENAS (John): variante que genera cada fila con MAP, extrayendo los valores correspondientes a cada clave:
`
=MAP(UNICOS(claves); LAMBDA(x;
UNIRCADENAS(", ";; FILTRAR(valores; claves = x))
))
`
Con PIVOTARPOR + BUSCARX (Leo): usando PIVOTARPOR como tabla pivote y BUSCARX para rellenar las posiciones:
`
=PIVOTARPOR(claves;; valores; LAMBDA(x; UNIRCADENAS(", ";; x));; 0)
`
Cada solución tiene sus ventajas: AGRUPARPOR es la más directa, ARCHIVOMAKEARRAY ofrece control total sobre la forma del resultado, y MAP` es la más legible.
El reto: pivotar concatenando valores
Leandro trajo al grupo un reto encontrado por internet: partiendo de una tabla con claves repetidas y sus valores, generar una tabla pivotada donde cada clave aparezca una sola vez y todos sus valores queden concatenados en la misma fila.
Es el tipo de problema que en una tabla dinámica clásica no se resuelve (las dinámicas suman y cuentan, no concatenan texto), así que hay que bajar a fórmulas. La comunidad respondió con cuatro enfoques que van de lo más directo a lo más artesanal.
Enfoque 1: AGRUPARPOR directo
Leo va al grano con la solución más limpia:
=AGRUPARPOR(
APILARV(UNICOS(claves); claves);
valores;
LAMBDA(x; UNIRCADENAS(", ";; x));;
0
)La gracia está en que AGRUPARPOR acepta cualquier función de agregación en forma de LAMBDA, no solo SUMA o PROMEDIO. Pasándole UNIRCADENAS agrupa por clave y pega los valores separados por comas. Una sola función hace todo el trabajo.
Enfoque 2: construir la tabla celda a celda
John plantea algo radicalmente distinto: en vez de agrupar, fabricar la matriz resultado desde cero.
=LET(
u; UNICOS(claves);
n; MAX(CONTAR.SI(claves; u));
ARCHIVOMAKEARRAY(FILAS(u); n; LAMBDA(i; j;
SI.ND(INDICE(
FILTRAR(valores; claves = INDICE(u; i));
j
); "")
))
)Primero calcula cuántas filas hará falta (las claves únicas) y cuántas columnas (el máximo de repeticiones de una clave). Después ARCHIVOMAKEARRAY va rellenando cada celda: para la fila i y la columna j, filtra los valores de esa clave y coge el j-ésimo. El SI.ND tapa los huecos cuando una clave tiene menos valores que otra.
Es más largo, pero te da control total sobre la forma del resultado: aquí los valores quedan en columnas separadas, no concatenados.
Enfoque 3: MAP fila a fila
John también propone una variante mucho más legible:
=MAP(UNICOS(claves); LAMBDA(x;
UNIRCADENAS(", ";; FILTRAR(valores; claves = x))
))Se lee casi como una frase: por cada clave única, filtra sus valores y únelos con comas. Si tuvieras que explicarle la fórmula a alguien, esta es la que entendería a la primera.
Enfoque 4: PIVOTARPOR
Leo cierra con la versión más compacta de todas:
=PIVOTARPOR(claves;; valores; LAMBDA(x; UNIRCADENAS(", ";; x));; 0)Mismo principio que AGRUPARPOR, pero usando la función pensada específicamente para pivotar.
Funciones clave
AGRUPARPOR: agrupa filas por una clave y aplica una función de agregación, que puede ser unaLAMBDApropia.PIVOTARPOR: la hermana deAGRUPARPORorientada a tablas cruzadas.UNIRCADENAS: concatena una matriz de textos con un separador. La pieza que las dinámicas clásicas no tienen.ARCHIVOMAKEARRAY: construye una matriz de las dimensiones que le digas, calculando cada celda con unaLAMBDAque recibe fila y columna.MAP: recorre un rango aplicando unaLAMBDAa cada elemento.UNICOSyFILTRAR: la base de casi todo lo anterior.
Cuál usar
Depende de qué quieras como resultado. Si buscas los valores concatenados en una celda, AGRUPARPOR o PIVOTARPOR son imbatibles en longitud. Si los quieres repartidos en columnas, ARCHIVOMAKEARRAY es el único de los cuatro que lo hace. Y si vas a tener que mantener la fórmula dentro de seis meses, el MAP es el que agradecerás.
Conclusión
Cuatro caminos para el mismo destino, cada uno con su punto fuerte: AGRUPARPOR gana en concisión, ARCHIVOMAKEARRAY en control y MAP en legibilidad. Retos así, con varios miembros compitiendo por la solución más elegante, salen cada semana en la comunidad de Influexcel.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Error #CALC con MAP y AGRUPARPOR: solución con REDUCE+APILARV CasoNuevo reto de Excel resuelto por la comunidad: un usuario necesita aplicar AGRUPARPOR de forma iterativa sobre un rango de códigos de cuenta
- Repetir un rango N veces según marca con MAP y CONTAR.SI CasoUn usuario necesita repetir un listado de locales (D2:D10) un número variable de veces para cada marca de la columna B. El número de repetic
- Readmisión de pacientes en 48h: Power Query, LAMBDA/MAP y AGRUPARPOR CasoAndrés Rojas plantea un reto real de datos clínicos: a partir de una tabla con más de un millón de registros de urgencias (IdPaciente, Fecha
- Buscar prefijos de longitud variable en otra columna: BYROW, MAP, REGEX y COINCIDIRX CasoInteresante problema planteado por un miembro: tiene una columna A con ~1.200 referencias de longitud variable y una columna C con ~276 text
- Reestructurar datos apilados con LAMBDA y PIVOTARPOR CasoUn miembro de la comunidad comparte un archivo de revisión de Seguridad Social con una tabla amplia (34 columnas x 1540 filas) en formato "a
- Generar la serie de Fibonacci con REDUCE, APILARV y LAMBDA CasoInteresante ejercicio compartido en la comunidad: generar los primeros N números de la serie de Fibonacci usando exclusivamente fórmulas de
- Filtrar una tabla por una lista de valores: una LAMBDA propia y su inversa TutorialTe pasan una lista de 30 números de albarán y hay que sacar esas filas de una tabla de miles. Con el autofiltro es marcar casillas una a una
- Funciones personalizadas en Excel: LET, LAMBDA y recursividad TutorialCómo pasar de una fórmula escrita a mano a una función propia que puedes llamar por su nombre en cualquier libro. Los tres vídeos de esta pá
- Automatizar Excel con VBA y ChatGPT: de pedirle el código a integrar la API TutorialTres niveles de automatización con VBA, ordenados de menos a más, y los dos primeros no exigen saber programar. 1. Pedirle el código a ChatG
- Influcharlas: John y Leo domando matrices TutorialEsta vez resolvemos un par de casos con las explicaciones de @JohnVergaraD y @LEO_rumano.