top of page
Foto del escritorJaime Franco Jimenez

Generar índice por grupos

Para el siguiente ejemplo, tenemos dos columnas, en la primera columna hay grupos, y, en la segunda columna, un empleado que pertenece a cada grupo.

Para cada grupo, debemos de generar el índice.


Para el mismo empleado en un grupo, el índice seguirá siendo el mismo.


El modelo debe de quedar como sigue:

Empecemos…


En la celda C2, creamos una variable, nos traemos el rango A2:B13.


=LET(yy;A2:B13

 

Creamos otra variable, nos traemos los valores únicos (UNICOS) del rango A2:A13, y, los ponemos en horizontal (ENFILA).


=LET(yy;A2:B13;xx;ENFILA(UNICOS(A2:A13))


Creamos otra variable, usamos la función REDUCE, como argumento valor inicial, ponemos blanco, como argumento array, ponemos la variable “xx”, como argumento función, ponemos LAMBDA, y, declaramos dos variables.


=LET(yy;A2:B13;xx;ENFILA(UNICOS(A2:A13));a;REDUCE("";xx;LAMBDA(x;y

 

Como argumento cálculo de LAMBDA, usamos la función APILARH, como argumento matriz1, ponemos la variable “x”, como argumento matriz2, usamos la función FILTRAR, como argumento array, usamos la función TOMAR, como argumento matriz, ponemos la variable “yy”, omitimos el argumento filas, como argumento columnas, ponemos -1, como argumento include, usamos la función TOMAR, como argumento matriz, ponemos la variable “yy”, omitimos el argumento filas, como argumento columnas, ponemos 1, cerramos paréntesis, e, igualamos a la variable “y”.


=LET(yy;A2:B13;xx;ENFILA(UNICOS(A2:A13));a;EXCLUIR(REDUCE("";xx;LAMBDA(x;y;APILARH(x;FILTRAR(TOMAR(yy;;-1);TOMAR(yy;;1)=y))));;1);a)

 

Tenemos una matriz desbordada de tres columnas, donde tenemos los empleados de cada grupo, y, una primera columna que está de más.

La primera columna está de más, usamos la función EXCLUIR antes de la función REDUCE, como argumento matriz es la función REDUCE, omitimos el argumento filas, como argumento columnas, ponemos 1.


=LET(yy;A2:B13;xx;ENFILA(UNICOS(A2:A13));a;EXCLUIR(REDUCE("";xx;LAMBDA(x;y;APILARH(x;FILTRAR(TOMAR(yy;;-1);TOMAR(yy;;1)=y))));;1);a)

Creamos otra variable, usamos la función UNICOS, como argumento matriz, usamos la función TOMAR, como argumento matriz, ponemos la variable “a”, omitimos el argumento filas, como argumento columnas, ponemos 1, vamos a obtener los valores únicos de la primera columna de la variable “a”.


=LET(yy;A2:B13;xx;ENFILA(UNICOS(A2:A13));a;EXCLUIR(REDUCE("";xx;LAMBDA(x;y;APILARH(x;FILTRAR(TOMAR(yy;;-1);TOMAR(yy;;1)=y))));;1);b;UNICOS(TOMAR(a;;1))

 

Creamos otra variable, usamos la función UNICOS, como argumento matriz, usamos la función TOMAR, como argumento matriz, ponemos la variable “a”, omitimos el argumento filas, como argumento columnas, ponemos -1, vamos a tener los valores únicos de la segunda columna de la variable “a”.


=LET(yy;A2:B13;xx;ENFILA(UNICOS(A2:A13));a;EXCLUIR(REDUCE("";xx;LAMBDA(x;y;APILARH(x;FILTRAR(TOMAR(yy;;-1);TOMAR(yy;;1)=y))));;1);b;UNICOS(TOMAR(a;;1));c;UNICOS(TOMAR(a;;-1))

 

Creamos otra variable, usamos la función APILARH, como argumento matriz1, ponemos la variable “b”, como argumento matriz2, usamos la función SECUENCIA, como argumento filas, contamos (CONTARA) la variable “b”, omitimos el resto de los argumentos, cerramos paréntesis, como argumento matriz3, ponemos la variable “c”, como argumento matriz4, usamos la función SECUENCIA, como argumento filas, contamos (CONTARA) la variable “b”, omitimos el resto de los argumentos, cerramos paréntesis.


=LET(yy;A2:B13;xx;ENFILA(UNICOS(A2:A13));a;EXCLUIR(REDUCE("";xx;LAMBDA(x;y;APILARH(x;FILTRAR(TOMAR(yy;;-1);TOMAR(yy;;1)=y))));;1);b;UNICOS(TOMAR(a;;1));c;UNICOS(TOMAR(a;;-1));d;APILARH(b;SECUENCIA(CONTARA(b));SECUENCIA(CONTARA(c));c);d)

 

Tenemos una matriz desbordada de cuatro columnas, en la primera columna tenemos los empleados del primer grupo junto con si índice, en la tercera columna, tenemos los empleados del segundo grupo junto con su índice.

Como en la primera columna hay cinco nombres, en las demás columnas, también debe de devolver cinco resultados, y, si no hay valores que mostrar, muestra error, como en este caso para la tercera, y, cuarta columna.


Usamos la función SI.ERROR, antes de la función APILARH, como argumento valor es la función APILARH, como argumento valor si error, ponemos blanco.


=LET(yy;A2:B13;xx;ENFILA(UNICOS(A2:A13));a;EXCLUIR(REDUCE("";xx;LAMBDA(x;y;APILARH(x;FILTRAR(TOMAR(yy;;-1);TOMAR(yy;;1)=y))));;1);b;UNICOS(TOMAR(a;;1));c;UNICOS(TOMAR(a;;-1));d;SI.ERROR(APILARH(b;SECUENCIA(CONTARA(b));SECUENCIA(CONTARA(c));c);"");d)

Usamos el argumento calculo de LET, ponemos la función ENCOL, como argumento matriz, usamos el condicional SI, como argumento prueba lógica, preguntamos si las columnas 1 y 3 de la variable “d”, que son los empleados, por lo que usamos la función ELEGIRCOLS, como argumento matriz, ponemos la variable “d”, como argumento col_num1, ponemos 1, como argumento col_num2, ponemos 3, cerramos paréntesis, igualamos a la ultima columna de la variable “yy”, por lo que usamos la función TOMAR, como argumento matriz, ponemos la variable “yy”, omitimos el argumento filas, como argumento columnas, ponemos -1.


=LET(yy;A2:B13;xx;ENFILA(UNICOS(A2:A13));a;EXCLUIR(REDUCE("";xx;LAMBDA(x;y;APILARH(x;FILTRAR(TOMAR(yy;;-1);TOMAR(yy;;1)=y))));;1);b;UNICOS(TOMAR(a;;1));c;UNICOS(TOMAR(a;;-1));d;SI.ERROR(APILARH(b;SECUENCIA(CONTARA(b));c;SECUENCIA(CONTARA(c)));"");ENCOL(SI(ENFILA(ELEGIRCOLS(d;1;3))=TOMAR(yy;;-1)

 

Como argumento valor si verdadero, usamos la función ENFILA, como argumento matriz, vamos a tomar las columnas 2 y 4 de la variable “d”, que son los valores, usamos la función ELEGIRCOLS, como argumento matriz, ponemos la variable “d”, como argumento col_num1, ponemos 2, como argumento col_num2, ponemos 4, cerramos paréntesis, como argumento valor si falso, ponemos un error, como argumento ignorar de ENCOL, seleccionamos 3.


=LET(yy;A2:B13;xx;ENFILA(UNICOS(A2:A13));a;EXCLUIR(REDUCE("";xx;LAMBDA(x;y;APILARH(x;FILTRAR(TOMAR(yy;;-1);TOMAR(yy;;1)=y))));;1);b;UNICOS(TOMAR(a;;1));c;UNICOS(TOMAR(a;;-1));d;SI.ERROR(APILARH(b;SECUENCIA(CONTARA(b));c;SECUENCIA(CONTARA(c)));"");ENCOL(SI(ENFILA(ELEGIRCOLS(d;1;3))=TOMAR(yy;;-1);ENFILA(ELEGIRCOLS(d;2;4));NOD());3))

 

Aceptamos, y, ya lo tenemos.



Miguel Angel Franco

2 visualizaciones0 comentarios

Comments


bottom of page