top of page

Restar cantidad con la siguiente

Para el siguiente ejemplo, vamos a trabajar con el siguiente modelo.















Nos solicitan que restemos una cantidad con otra, es decir, la primera cantidad menos la segunda cantidad, el resultado de la resta, menos la tercera cantidad, de nuevo, el resultado de la resta con la cuarta cantidad, así con el resto de las cantidades.












Realmente, lo que tenemos que hacer es restar la primera cantidad con la segunda, después, la primera cantidad menos la segunda y tercera cantidad, así con el resto de las cantidades.


Para resolver este ejemplo, vamos a hacer uso de la función SCAN.


En la celda I2, ponemos la función SCAN, como argumento valor inicial, con la función INDICE, nos traemos la primera cantidad.


=SCAN(INDICE(Ventas[Total];1)


Cómo argumento array, volvemos a usar INDICE, donde nos vamos a traer todas las cantidades, excepto, la primera cantidad, como argumento matriz de INDICE, es la columna total de la tabla ventas, como argumento numero de fila, usamos SECUENCIA, como argumento filas, usamos SECUENCIA, como argumento filas, usamos CONTARA, y, como argumento de CONTARA, es la columna total de la tabla ventas, como argumento inicio de SECUENCIA, ponemos 2, como argumento paso, ponemos 1, omitimos le argumento número de columna, cerramos paréntesis.


=SCAN(INDICE(Ventas[Total];1);INDICE(Ventas[Total];SECUENCIA(CONTARA(Ventas[Total]);;2;1))


Como argumento función de SCAN, ponemos LAMBDA, declaramos dos variables, la primera variable que es el argumento valor inicial, siempre va a contener la primera cantidad.


=SCAN(INDICE(Ventas[Total];1);INDICE(Ventas[Total];SECUENCIA(CONTARA(Ventas[Total]);;2;1));LAMBDA(a;b


Como argumento cálculo de LAMBDA, restamos ambas variables.


Cerramos paréntesis.


=SCAN(INDICE(Ventas[Total];1);INDICE(Ventas[Total];SECUENCIA(CONTARA(Ventas[Total]);;2;1));LAMBDA(a;b;a-b))


Aceptamos, y, vemos que tenemos una matriz desbordada con la resta de cada cantidad correcta.























Vemos que la ultima celda nos devuelve un error, error que es normal, porque no tenemos cantidad que restar, para quitar el error, usamos la función SI.ERROR.


=SI.ERROR(SCAN(INDICE(Ventas[Total];1);INDICE(Ventas[Total];SECUENCIA(CONTARA(Ventas[Total]);;2;1));LAMBDA(a;b;a-b));"")


Usamos la función APILARV, como argumento matriz1, entre comillas dobles, ponemos Resta, como argumento matriz2, es la expresión anterior.


=APILARV("Resta";SI.ERROR(SCAN(INDICE(Ventas[Total];1);INDICE(Ventas[Total];SECUENCIA(CONTARA(Ventas[Total]);;2;1));LAMBDA(a;b;a-b));""))


Aceptamos.














Y si tenemos celdas sin nada.
















En este caso, cuando hagamos la resta de las cuatro primeras cantidades, el resultado debe de ser restado con la cantidad de 50, ignorando la celda en blanco, así con el resto de las cantidades.


Lo haremos en otra hoja.


Con la función INDICE, nos traemos las cantidades.


=INDICE(Ventas2[Total];SECUENCIA(CONTARA(Ventas2[Total])))


Vamos a filtrar la expresión anterior, siempre que sea diferente a blanco, para ello, usamos la función FILTRAR, pero, como vamos a usar dos veces la misma expresión, vamos a usar LET.


=LET(a;INDICE(Ventas2[Total];SECUENCIA(CONTARA(Ventas2[Total])));FILTRAR(a;a<>""))


Creamos otra variable, filtramos la variable “a”, siempre que dicha variable, sea diferente a blanco.


=LET(a;INDICE(Ventas2[Total];SECUENCIA(CONTARA(Ventas2[Total])));b;FILTRAR(a;a<>"")


Creamos otra variable, donde vamos a almacenar las cantidades a partir de la segunda cantidad, volvemos a usar INDICE, como argumento matriz, ponemos la variable “a”, como argumento número de fila, usamos la función SECUENCIA, como argumento filas, usamos la función CONTARA, como argumento de CONTARA, ponemos la variable “a”, como argumento inicio, ponemos 2, como argumento paso, ponemos 1, omitimos el argumento número de columna, cerramos paréntesis.


=LET(a;INDICE(Ventas2[Total];SECUENCIA(CONTARA(Ventas2[Total])));b;FILTRAR(a;a<>"");c;INDICE(b;SECUENCIA(CONTARA(b);;2;1))


Como argumento cálculo de LET, ponemos la función SCAN, como argumento valor inicial, ponemos la variable “b”, pero debemos de quedarnos con el primer valor, por lo que usamos INDICE, como argumento matriz, es la variable “b”, como argumento número de fila, ponemos 1, omitimos el argumento número de columna, cerramos paréntesis.


=LET(a;INDICE(Ventas23[Total];SECUENCIA(CONTARA(Ventas23[Total])));b;FILTRAR(a;a<>"");c;INDICE(b;SECUENCIA(CONTARA(b);;2;1));SCAN(INDICE(b;1)


Como argumento matriz, ponemos la variable “c”.


=LET(a;INDICE(Ventas23[Total];SECUENCIA(CONTARA(Ventas23[Total])));b;FILTRAR(a;a<>"");c;INDICE(b;SECUENCIA(CONTARA(b);;2;1));SCAN(INDICE(b;1);c


Como argumento función, ponemos LAMBDA, y, creamos dos variables.


=LET(a;INDICE(Ventas23[Total];SECUENCIA(CONTARA(Ventas23[Total])));b;FILTRAR(a;a<>"");c;INDICE(b;SECUENCIA(CONTARA(b);;2;1));SCAN(INDICE(b;1);c;LAMBDA(x;y


Como argumento cálculo de LAMBDA, restamos ambas variables.

Cerramos paréntesis.

=LET(a;INDICE(Ventas23[Total];SECUENCIA(CONTARA(Ventas23[Total])));b;FILTRAR(a;a<>"");c;INDICE(b;SECUENCIA(CONTARA(b);;2;1));SCAN(INDICE(b;1);c;LAMBDA(x;y;x-y)))


Para quitar el error, usamos la función SI.ERROR.


=SI.ERROR(LET(a;INDICE(Ventas23[Total];SECUENCIA(CONTARA(Ventas23[Total])));b;FILTRAR(a;a<>"");c;INDICE(b;SECUENCIA(CONTARA(b);;2;1));SCAN(INDICE(b;1);c;LAMBDA(x;y;x-y)));"")


Volvemos a usar APILARV, y, ponemos la palabra Resta.


=APILARV("Resta";SI.ERROR(LET(a;INDICE(Ventas23[Total];SECUENCIA(CONTARA(Ventas23[Total])));b;FILTRAR(a;a<>"");c;INDICE(b;SECUENCIA(CONTARA(b);;2;1));SCAN(INDICE(b;1);c;LAMBDA(x;y;x-y)));""))


Aceptamos, y, ya lo tenemos.
















Miguel Angel Franco

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page