Registros mayores a segunda cantidad
- Jaime Franco Jimenez

- 23 ago 2023
- 3 Min. de lectura
Para el siguiente ejemplo, vamos a trabajar con el modelo que suelo usar habitualmente, pero, algo más corto.
Podemos ver que hay dos registros iguales.

El modelo esta en formato de rango.
Debemos de crear un reporte con aquellos registros que sean mayores a la segunda cantidad que aparece en los dos registros repetidos, es decir, crear un reporte desde la fila 18, que sean mayores a 4.040.
En la celda I2, usamos LET, creamos una variable, la llamaremos pregunta, preguntamos si en el rango G2:G26, los totales, es igual a 4040, que nos devuelva la fila de dicho rango, en caso contrario, que devuelva un texto en blanco.
Probamos variable.
=LET(pregunta;SI(G2:G26=4040;FILA(G2:G26);"");pregunta)
Tenemos una matriz desbordada con el numero de fila donde aparece dicha cantidad, y, blanco donde no hay coincidencia.

Nos quedamos con el valor máximo, y, sumamos 1.
=LET(pregunta;MAX(SI(G2:G26=4040;FILA(G2:G26);""))+1;pregunta)
Creamos otra variable, la llamaremos contador, usamos la función CONTARA, y, como argumento ponemos la columna A.
Probamos variable.
=LET(pregunta;MAX(SI(G2:G26=4040;FILA(G2:G26);""))+1;contador;CONTARA(A:A);contador)
Nos devuelve 26.
Ya tenemos donde comenzar a extraer y donde terminar, es decir, empezamos en la fila 18, y, terminamos en la fila 26.
Creamos otra variable, la llamaremos listado, usamos la función SECUENCIA, como argumento filas, a la variable contador, que vale 26, le restamos la variable pregunta, que vale 18, y, sumamos 1, omitimos el argumento columnas, como argumento inicio, ponemos la variable pregunta, omitimos el argumento paso.
Probamos variable.
=LET(pregunta;MAX(SI(G2:G26=4040;FILA(G2:G26);""))+1;contador;CONTARA(A:A);listado;SECUENCIA(contador-pregunta+1;;pregunta);listado)
Tenemos una matriz desbordada desde el numero 18 al número 26.

Creamos otra variable, la llamaremos reporte, usamos la función INDICE, como argumento matriz, seleccionamos las columnas A:G, como argumento numero de fila, ponemos la variable listado, como argumento numero de columna, usamos la función SECUENCIA, omitimos argumento filas, como argumento columnas, ponemos 7, que son los encabezados que hay.
Probamos variable.
=LET(pregunta;MAX(SI(G2:G26=4040;FILA(G2:G26);""))+1;contador;CONTARA(A:A);listado;SECUENCIA(contador-pregunta+1;;pregunta);reporte;INDICE(A:G;listado;SECUENCIA(;7));reporte)
Tenemos un reporte desde la fila 18 a la fila 26.

Como argumento calculo de LET, usamos la función FILTRAR, como argumento array, ponemos la variable reporte, como argumento include, usamos INDICE, como argumento matriz, ponemos la variable reporte, omitimos el argumento numero de fila, como argumento numero de columna, ponemos 7, y, comparamos con mayor a 4040, es decir, comparamos la columna de total, desde la fila 18 a la fila 26, cuando sea mayor a 4040.
=LET(pregunta;MAX(SI(G2:G26=4040;FILA(G2:G26);""))+1;contador;CONTARA(A:A);listado;SECUENCIA(contador-pregunta+1;;pregunta);reporte;INDICE(A:G;listado;SECUENCIA(;7));FILTRAR(reporte;INDICE(reporte;;7)>4040))
Aceptamos, y, ya tenemos nuestro reporte desde la fila 18 a la fila 26, pero solo aquellos registros que son mayores a 4040.

Copiamos en encabezado.

Para el siguiente ejemplo, debemos de crear un reporte con las filas entre ambas cantidades, es decir, entre las filas 10 y 16, y, las filas 18 y 26.
La primera variable es la misma que para el ejemplo anterior.
=LET(pregunta;SI(G2:G26=4040;FILA(G2:G26);"")
Obtenemos una matriz desbordada con el numero de fila donde se encuentra el valor 4040.

Creamos otra variable, la llamaremos inicio1, nos traernos el valor mínimo de la variable pregunta, y, sumamos 1, vamos a obtener el punto de partida para la primera matriz.
=LET(pregunta;SI(G2:G26=4040;FILA(G2:G26);"");inicio1;MIN(pregunta)+1;inicio1)
Obtenemos la fila 10.
Creamos otra variable, la llamaremos final1, nos traemos el valor máximo de la variable pregunta.
=LET(pregunta;SI(G2:G26=4040;FILA(G2:G26);"");inicio1;MIN(pregunta)+1;final1;MAX(pregunta);final1)
Nos devuelve la fila 17.
Creamos otra variable, la llamaremos listado1, usamos la función SECUENCIA, como argumento filas, restamos la variable final1 menos la variable inicio1, omitimos el argumento columnas, como argumento inicio, ponemos la variable inicio1, omitimos el argumento paso.
=LET(pregunta;SI(G2:G26=4040;FILA(G2:G26);"");inicio1;MIN(pregunta)+1;final1;MAX(pregunta);listado1;SECUENCIA(final1-inicio1;;inicio1);listado1)
Obtenemos una matriz desbordada desde el numero 10 al numero 16, que son las primeras filas para recuperar.

Creamos otra variable, la llamaremos inicio2, sumamos 1 a la variable final1.
=LET(pregunta;SI(G2:G26=4040;FILA(G2:G26);"");inicio1;MIN(pregunta)+1;final1;MAX(pregunta);listado1;SECUENCIA(final1-inicio1;;inicio1);inicio2;final1+1;inicio2)
Obtenemos la fila 18.
Creamos otra variable, la llamaremos final2, usamos la función CONTARA, como argumento seleccionamos la columna A, y, sumamos 1.
=LET(pregunta;SI(G2:G26=4040;FILA(G2:G26);"");inicio1;MIN(pregunta)+1;final1;MAX(pregunta);listado1;SECUENCIA(final1-inicio1;;inicio1);inicio2;final1+1;final2;CONTARA(A:A)+1;final2)
Obtenemos la fila 27.
Creamos otra variable, la llamaremos listado2, usamos la función SECUENCIA, como argumento filas, a la variable final2 restamos la variable inicio2, omitimos el argumento columnas, como argumento inicio, ponemos la variable inicio2, omitimos el argumento paso.
=LET(pregunta;SI(G2:G26=4040;FILA(G2:G26);"");inicio1;MIN(pregunta)+1;final1;MAX(pregunta);listado1;SECUENCIA(final1-inicio1;;inicio1);inicio2;final1+1;final2;CONTARA(A:A)+1;listado2;SECUENCIA(final2-inicio2;;inicio2);listado2)
Obtenemos una matriz desbordada desde el numero 18 hasta el número 26.

Creamos otra variable, la llamaremos resultado, usamos la función APILARV, como argumento matriz1, ponemos la variable informe1, como argumento matriz2, ponemos la variable informe2.
=LET(pregunta;SI(G2:G26=4040;FILA(G2:G26);"");inicio1;MIN(pregunta)+1;final1;MAX(pregunta);listado1;SECUENCIA(final1-inicio1;;inicio1);inicio2;final1+1;final2;CONTARA(A:A)+1;listado2;SECUENCIA(final2-inicio2;;inicio2);resultado;APILARV(listado1;listado2);resultado)
Obtenemos una matriz desbordada con las filas a recuperar.

Antes de APILARV, ponemos la función INDICE, como argumento matriz, seleccionamos las columnas A:G, como argumento numero de fila, es la función APILARV, como argumento número de columna, usamos la función SECUENCIA, omitimos el argumento filas, como argumento columnas, ponemos 7.
=LET(pregunta;SI(G2:G26=4040;FILA(G2:G26);"");inicio1;MIN(pregunta)+1;final1;MAX(pregunta);listado1;SECUENCIA(final1-inicio1;;inicio1);inicio2;final1+1;final2;CONTARA(A:A)+1;listado2;SECUENCIA(final2-inicio2;;inicio2);resultado;INDICE(A:G;APILARV(listado1;listado2);SECUENCIA(;7));resultado)
Obtenemos el reporte, o, informe con los registros entre ambas cantidades.

Como argumento cálculo de LET, usamos la función FILTRAR, como argumento matriz, es la variable resultado, como argumento include, es la columna 7, siempre que sea diferente a 4040.
=LET(pregunta;SI(G2:G26=4040;FILA(G2:G26);"");inicio1;MIN(pregunta)+1;final1;MAX(pregunta);listado1;SECUENCIA(final1-inicio1;;inicio1);inicio2;final1+1;final2;CONTARA(A:A)+1;listado2;SECUENCIA(final2-inicio2;;inicio2);resultado;INDICE(A:G;APILARV(listado1;listado2);SECUENCIA(;7));FILTRAR(resultado;INDICE(resultado;;7)>4040))
Aceptamos, y, ya tenemos nuestro ejemplo resuelto.

Miguel Angel Franco




Comentarios