Cuarta fecha si id es mayor a 4
- Jaime Franco Jimenez

- 8 ene 2024
- 3 Min. de lectura
Tenemos unos ID de máquinas, y, una fecha de desglose para id d máquina.
En aquellos id de maquinas que tienen mas de cuatro fechas de desglose, debemos de extraer la cuarta fecha de desglose.
Por ejemplo, el id de maquina 1, tiene seis fechas, pues, debemos de extraer la cuarta fecha.
En la celda D3, usamos LET, creamos una variable, seleccionamos el rango A2:A20, creamos otra variable, y, seleccionamos el rango B2:B20.
=LET(xx;A2:A20;yy;B2:B20
Creamos otra variable, nos traemos los valores únicos de la variable “xx”.
=LET(xx;A2:A20;yy;B2:B20;a;UNICOS(xx);a)
Lo ponemos en horizontal con la funcion ENFILA.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));a)
Creamos otra variable, usamos la funcion REDUCE, como argumento valor inicial, ponemos 0, como argumento array, ponemos la variable “a”, como argumento funcion, ponemos LAMBDA, y, declaramos dos variables.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));b;REDUCE(0;a;LAMBDA(x;y
Como argumento calculo de LAMBDA, usamos la funcion APILARH, como argumento matriz1, ponemos la variable “x”, como argumento matriz2, usamos la funcion FILTRAR, como argumento array, ponemos la variable “yy”, como argumento Include, ponemos la variable “xx” e igualamos a la variable “y”.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));b;REDUCE(0;a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;xx=y))));b)
Tenemos una matriz desbordada de cinco columnas, con las fechas que corresponde con cada id de máquina, error donde no hay fechas que mostrar, y, una primera columna que está de más.
Usamos la funcion EXCLUIR, como argumento matriz es la funcion REDUCE, omitimos el argumento filas, como argumento columnas, ponemos 1.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));b;EXCLUIR(REDUCE(0;a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;xx=y))));;1);b)
Usamos la funcion SI.ERROR, como argumento valor es la funcion EXCLUIR, como argumento valor si error, ponemos blanco.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));b;SI.ERROR(EXCLUIR(REDUCE(0;a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;xx=y))));;1);"");b)
Creamos otra variable, usamos la funcion MAP, como argumento array, ponemos la variable “b”, ponemos LAMBDA, declaramos una variable, usamos el condicional SI, como argumento prueba lógica, preguntamos si la variable “x” es distinto a blanco, en ese caso (valor si verdadero), que ponga 1, en caso contrario, (valor si falso), que ponga 0.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));b;SI.ERROR(EXCLUIR(REDUCE(0;a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;xx=y))));;1);"");c;MAP(b;LAMBDA(x;SI(x<>"";1;0)));c)
Tenemos 1 donde había una fecha, y, 0 donde no la había.
Creamos otra variable, usamos la funcion BYCOL, como argumento array, ponemos la variable “c”, como argumento funcion, ponemos LAMBDA, declaramos una variable, y, sumamos dicha variable.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));b;SI.ERROR(EXCLUIR(REDUCE(0;a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;xx=y))));;1);"");c;MAP(b;LAMBDA(x;SI(x<>"";1;0)));d;BYCOL(c;LAMBDA(x;SUMA(x)));d)
Tenemos el recuento de cada id de máquina.
Creamos otra variable, usamos el condicional SI, como argumento prueba lógica, preguntamos si la variable “d” es mayor a 4, como argumento valor si verdadero, ponemos la variable “b”, como argumento valor si falso, entre comillas dobles, ponemos NA.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));b;SI.ERROR(EXCLUIR(REDUCE(0;a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;xx=y))));;1);"");c;MAP(b;LAMBDA(x;SI(x<>"";1;0)));d;BYCOL(c;LAMBDA(x;SUMA(x)));e;SI(d>4;b;"NA");e)
Tenemos NA donde el recuento no es mayor a 4, y, las fechas donde el recuento es mayor a 4.
Usamos la funcion INDICE, como argumento matriz, es el condicional SI, como argumento numero de fila, ponemos 4, que es la fila que necesitamos, como argumento numero de columna, usamos la funcion SECUENCIA, omitimos el argumento filas, como argumento columnas, ponemos 4.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));b;SI.ERROR(EXCLUIR(REDUCE(0;a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;xx=y))));;1);"");c;MAP(b;LAMBDA(x;SI(x<>"";1;0)));d;BYCOL(c;LAMBDA(x;SUMA(x)));e;INDICE(SI(d>4;b;NOD());4;SECUENCIA(;4));e)
Tenemos una matriz desbordada en horizontal con error donde no hay fechas que mostrar y la cuarta fecha donde el recuento es mayor a 4.
Antes pusimos que pusiera NA en el argumento valor si falso del condicional SI, pero, ahora tenemos error, creamos otra variable, usamos el condicional SI, preguntamos si es error la variable “e”, en ese caso, entre comillas dobles, que ponga NA, en caso contrario, que devuelva la variable “e”.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));b;SI.ERROR(EXCLUIR(REDUCE(0;a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;xx=y))));;1);"");c;MAP(b;LAMBDA(x;SI(x<>"";1;0)));d;BYCOL(c;LAMBDA(x;SUMA(x)));e;INDICE(SI(d>4;b;NOD());4;SECUENCIA(;4));f;SI(ESERROR(e);"NA";e);f)
Hemos sustituido el error por NA.
Usamos ENCOL, como argumento es el condicional SI.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));b;SI.ERROR(EXCLUIR(REDUCE(0;a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;xx=y))));;1);"");c;MAP(b;LAMBDA(x;SI(x<>"";1;0)));d;BYCOL(c;LAMBDA(x;SUMA(x)));e;INDICE(SI(d>4;b;NOD());4;SECUENCIA(;4));f;ENCOL(SI(ESERROR(e);"NA";e));f)
Usamos el argumento calculo de LET, usamos la funcion APILARH, como argumento matriz1, usamos ENCOL, como argumento ponemos la variable “a”, como argumento matriz2, ponemos la variable “f”.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));b;SI.ERROR(EXCLUIR(REDUCE(0;a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;xx=y))));;1);"");c;MAP(b;LAMBDA(x;SI(x<>"";1;0)));d;BYCOL(c;LAMBDA(x;SUMA(x)));e;INDICE(SI(d>4;b;NOD());4;SECUENCIA(;4));f;ENCOL(SI(ESERROR(e);"NA";e));APILARH(ENCOL(a);f))
Usamos la funcion ORDENAR antes de APILARH, como argumento matriz es la funcion APILARH, como argumento ordenar índice, ponemos 1.
=LET(xx;A2:A20;yy;B2:B20;a;ENFILA(UNICOS(xx));b;SI.ERROR(EXCLUIR(REDUCE(0;a;LAMBDA(x;y;APILARH(x;FILTRAR(yy;xx=y))));;1);"");c;MAP(b;LAMBDA(x;SI(x<>"";1;0)));d;BYCOL(c;LAMBDA(x;SUMA(x)));e;INDICE(SI(d>4;b;NOD());4;SECUENCIA(;4));f;ENCOL(SI(ESERROR(e);"NA";e));ORDENAR(APILARH(ENCOL(a);f);1))
Aceptamos y ya lo tenemos.
Miguel Angel Franco



















Comentarios