Tenemos en una columna, una serie de fechas, debajo de cada fecha, hay una orden.
Debemos de obtener el último pedido de cada mes.
En la celda C2, usamos LET, creamos una variable, seleccionamos el rango A2:A21.
=LET(xx;A2:A21;xx)
Creamos otra variable, usamos la función SECUENCIA, como argumento filas, contamos las celdas alfanuméricas de la variable “xx”.
=LET(xx;A2:A21;aa;SECUENCIA(CONTARA(xx));aa)
Tenemos una matriz desbordada en vertical desde el numero 1 al número 20.
Antes de la función SECUENCIA, preguntamos si es impar el resultado de SECUENCIA.
=LET(xx;A2:A21;aa;ES.IMPAR(SECUENCIA(CONTARA(xx)));aa)
Tenemos una matriz desbordada en vertical con VERDADERO donde en impar, y, FALSO donde no lo es.
Antes de la función ES.IMPAR, usamos la función FILTRAR, como argumento array, ponemos la variable “xx”, como argumento include, es la función ES.IMPAR.
=LET(xx;A2:A21;aa;FILTRAR(xx;ES.IMPAR(SECUENCIA(CONTARA(xx))));aa)
Tenemos las fechas.
Ordenamos.
=LET(xx;A2:A21;aa;ORDENAR(FILTRAR(xx;ES.IMPAR(SECUENCIA(CONTARA(xx)))));aa)
Creamos otra variable, usamos la función ENFILA, como argumento matriz, ponemos la función UNICOS, como argumento matriz, usamos la función MES, como argumento ponemos la variable “aa”.
=LET(xx;A2:A21;aa;ORDENAR(FILTRAR(xx;ES.IMPAR(SECUENCIA(CONTARA(xx)))));b;ENFILA(UNICOS(MES(aa)));b)
Tenemos los meses únicos en horizontal.
Creamos otra variable, usamos la función REDUCE, como argumento valor inicial, ponemos blanco, como argumento array, ponemos la variable “b”, como argumento función, ponemos LAMBDA, y, declaramos dos variables.
=LET(xx;A2:A21;aa;ORDENAR(FILTRAR(xx;ES.IMPAR(SECUENCIA(CONTARA(xx)))));b;ENFILA(UNICOS(MES(aa)));c;REDUCE("";b;LAMBDA(x;y
Como argumento calculo, usamos la función APIALRH, como argumento matriz1, ponemos la variable “x”, como argumento matriz2, usamos el condicional SI, como argumento prueba lógica, preguntamos si el mes de la variable “xx” es igual a la variable “y”, como argumento valor si verdadero, ponemos la función FILA, como argumento referencia, ponemos la variable “xx”, y, sumamos 1, como argumento valor si falso, ponemos un error.
=LET(xx;A2:A21;aa;ORDENAR(FILTRAR(xx;ES.IMPAR(SECUENCIA(CONTARA(xx)))));b;ENFILA(UNICOS(MES(aa)));c;REDUCE("";b;LAMBDA(x;y;APILARH(x;SI(MES(xx)=y;FILA(xx)+1;NOD()))));c)
Tenemos una matriz desbordada de seis columnas, con la fila mas 1 de cada mes, y, error donde no hay coincidencia.
La primera columna está de más, por lo que 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(xx;A2:A21;aa;ORDENAR(FILTRAR(xx;ES.IMPAR(SECUENCIA(CONTARA(xx)))));b;ENFILA(UNICOS(MES(aa)));c;EXCLUIR(REDUCE("";b;LAMBDA(x;y;APILARH(x;SI(MES(xx)=y;FILA(xx)+1;NOD()))));;1);c)
Creamos otra variable, usamos la función INDICE, como argumento matriz, ponemos la columna A, como argumento número de fila, ponemos la variable “c”.
=LET(xx;A2:A21;aa;ORDENAR(FILTRAR(xx;ES.IMPAR(SECUENCIA(CONTARA(xx)))));b;ENFILA(UNICOS(MES(aa)));c;EXCLUIR(REDUCE("";b;LAMBDA(x;y;APILARH(x;SI(MES(xx)=y;FILA(xx)+1;NOD()))));;1);d;INDICE(A:A;c);d)
Obtenemos la misma matriz desbordada que la anterior, pero, con las órdenes.
Antes de la función INDICE, ponemos la función SI.ERROR, como argumento valor es la función INDICE, como argumento valor si error, ponemos blanco.
=LET(xx;A2:A21;aa;ORDENAR(FILTRAR(xx;ES.IMPAR(SECUENCIA(CONTARA(xx)))));b;ENFILA(UNICOS(MES(aa)));c;EXCLUIR(REDUCE("";b;LAMBDA(x;y;APILARH(x;SI(MES(xx)=y;FILA(xx)+1;NOD()))));;1);d;SI.ERROR(INDICE(A:A;c);"");d)
Creamos otra variable, usamos la función BYCOL, como argumento array, ponemos la variable “d”, como argumento función, ponemos LAMBDA, declaramos una variable, como argumento calculo, ponemos la función K.ESIMO.MAYOR, como argumento matriz, ponemos la variable “x”, como argumento K, ponemos 1.
=LET(xx;A2:A21;aa;ORDENAR(FILTRAR(xx;ES.IMPAR(SECUENCIA(CONTARA(xx)))));b;ENFILA(UNICOS(MES(aa)));c;EXCLUIR(REDUCE("";b;LAMBDA(x;y;APILARH(x;SI(MES(xx)=y;FILA(xx)+1;NOD()))));;1);d;SI.ERROR(INDICE(A:A;c);"");e;BYCOL(d;LAMBDA(x;K.ESIMO.MAYOR(x;1)));e)
Tenemos la orden máxima para cada orden.
Usamos el argumento calculo de LET, usamos la función APILARH, como argumento matriz1, usamos la función ENCOL, como argumento ponemos la variable “b”, como argumento matriz2, usamos ENCOL, como argumento, ponemos la variable “e”.
=LET(xx;A2:A21;aa;ORDENAR(FILTRAR(xx;ES.IMPAR(SECUENCIA(CONTARA(xx)))));b;ENFILA(UNICOS(MES(aa)));c;EXCLUIR(REDUCE("";b;LAMBDA(x;y;APILARH(x;SI(MES(xx)=y;FILA(xx)+1;NOD()))));;1);d;SI.ERROR(INDICE(A:A;c);"");e;BYCOL(d;LAMBDA(x;K.ESIMO.MAYOR(x;1)));APILARH(ENCOL(b);ENCOL(e)))
Aceptamos, y, ya lo tenemos.
Miguel Angel Franco
Comments