Numeros por ID
- Jaime Franco Jimenez

- 31 mar 2024
- 2 Min. de lectura
Para el siguiente ejemplo, tenemos dos columnas, en una primera columna, tenemos una serie de ID´s, en la segunda columna tenemos un valor para cada ID.
Debemos de crear un modelo, donde en una primera columna, debe de aparecer los ID´s únicos, en las siguientes columnas, debe de aparecer los números asociados para cada ID.
El modelo debe de quedar como sigue:
Empecemos…
En la celda D1, usamos LET, creamos una variable, usamos la funcion ORDENAR, como argumento matriz, usamos la funcion UNICOS, como argumento seleccionamos el rango A2:A15.
Probamos variable.
=LET(a;ORDENAR(UNICOS(A2:A15));a)
Tenemos en vertical los ID únicos.
Creamos otra variable, usamos la funcion REDUCE, como argumento valor inicial, ponemos blanco, como argumento array, ponemos la variable “a”, como argumento funcion, ponemos LAMBDA, y, declaramos dos variables.
=LET(a;ORDENAR(UNICOS(A2:A15));b;REDUCE("";a;LAMBDA(x;y
Como argumento cálculo de LAMBDA, usamos la funcion APILARH, como argumento matriz1, ponemos la variable “x”, como argumento matriz2, usamos la funcion FILTRAR, como argumento array, seleccionamos el rango B2:B15, como argumento Include, seleccionamos el rango A2:A15 e igualamos a la variable “y”, cerramos paréntesis, probamos variable.
También, podemos crear una variable con el rango A2:A15, y, otra variable con el rango B2:B15.
=LET(a;ORDENAR(UNICOS(A2:A15));b;REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(B2:B15;A2:A15=y))));b)
Ya tenemos los números que corresponden con cada ID, y, error donde no hay coincidencia.
La primera columna está de más, antes de REDUCE, usamos la funcion EXCLUIR, como argumento matriz es la función REDUCE, omitimos el argumento filas, como argumento columnas, ponemos 1.
=LET(a;ORDENAR(UNICOS(A2:A15));b;EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(B2:B15;A2:A15=y))));;1);b)
¿Por qué usamos APILARH?
Si quitamos la funcion APILARH, nos devuelve los números que corresponde con e ultimo ID, que es lo que hace la funcion REDUCE, al usar la función APILARH, y, como argumento matriz1, ponemos la variable “x”, obligamos a que nos devuelve la variable “x” cuatro veces, que son los ID que hay, y, a la vez, nos devuelve los números de cada ID.
Antes de EXCLUIR, usamos la función SI.ERROR, como argumento valor es la funcion EXCLUIR, como argumento valor si error, ponemos blanco.
=LET(a;ORDENAR(UNICOS(A2:A15));b;SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(B2:B15;A2:A15=y))));;1);"");b)
Pero, tenemos los números que corresponden con cada ID en vertical, y, lo tenemos que poner en horizontal, por lo que antes de SI.ERROR, usamos la funcion TRANSPONER.
=LET(a;ORDENAR(UNICOS(A2:A15));b;TRANSPONER(SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(B2:B15;A2:A15=y))));;1);""));b)
Ya lo tenemos.
Creamos otra variable, ponemos entre comillas Num, concatenamos con la funcion SECUENCIA, omitimos el argumento filas, como argumento columnas, ponemos 5, vamos a conseguir el encabezado de los números.
=LET(a;ORDENAR(UNICOS(A2:A15));b;TRANSPONER(SI.ERROR(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(B2:B15;A2:A15=y))));;1);""));c;"Num "&SECUENCIA(;5);c)
Usamos el argumento cálculo de LET, usamos la funcion APILARV, como argumento matriz1, usamos la funcion APILARH, como argumento matriz1, entre comillas dobles, ponemos ID, como argumento matriz2, ponemos la variable “c”, cerramos paréntesis, como argumento matriz2 de APILARV, volvemos a usar APILARH, como argumento matriz1, ponemos la variable “a”, como argumento matriz2, ponemos la variable “b”.
=LET(a;ORDENAR(UNICOS(A2:A15));b;SI.ERROR(TRANSPONER(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;FILTRAR(B2:B15;A2:A15=y))));;1));"");c;"Num "&SECUENCIA(;5);APILARV(APILARH("ID";c);APILARH(a;b)))
Aceptamos, y, ya lo tenemos.
Vamos a hacerlo de una manera mas rápida, con la funcion AGRUPARPOR, como argumento row fields, seleccionamos el rango A2:A15, como argumento values, seleccionamos el rango B2:B15, concatenamos con un espacio, como argumento funcion, ponemos CONCAT, omitimos el argumento field headers, como argumento total depth, seleccionamos no totales.
¿Por qué concateno el rango B2:B15 con un espacio?
Si no concateno con un espacio, los números aparecerían juntos.
=AGRUPARPOR(A2:A15;B2:B15&" ";CONCAT;;0)
Aceptamos, y, ya lo tenemos.
Miguel Angel Franco













Comentarios