top of page

Stock restante por almacen

Tenemos una serie de almacenes, Store A, Store B, y, Store C, cada almacén tiene una entrada y una salida.


















Debemos de añadir una nueva columna, donde debemos de restar al stock de cada almacén, la resta de las cantidades de entradas y salidas.


El modelo debe de quedar como sigue:

















En la celda D2, usamos LET, creamos una variable, la llamamos resta, seleccionamos el rango C2:C12 y restamos con el rango B2:B12, probamos variable.


=LET(resta;C2:C12-B2:B12;resta)

 

Tenemos la resta de cada salida con cada cierre.
















Creamos otra variable, usamos la funcion REDUCE, como argumento valor inicial, ponemos blanco, como argumento array, seleccionamos el rango F2:F4 (almacenes únicos), ponemos LAMBDA, y, creamos dos variables.


=LET(resta;C2:C12-B2:B12;a;REDUCE("";F2:F4;LAMBDA(X;Y


Como argumento cálculo de LAMBDA, usamos APILARH, como argumento matriz1, ponemos la variable “x”, como argumento matriz2, usamos FILTRAR, como argumento array, ponemos la variable resta, como argumento Include, seleccionamos el rango A2:A12 e igualamos a la variable “y”.


=LET(resta;C2:C12-B2:B12;a;REDUCE("";F2:F4;LAMBDA(X;Y;APILARH(X;FILTRAR(resta;A2:A12=Y))));a)

 

Tenemos una matriz desbordada de cuatro columnas, en la primera columna tenemos error, en la segunda columna, tenemos la resta para Store A, en la segunda columna, tenemos la resta para Store B, y, en la tercera columna tenemos la resta para Store C.








Usamos EXCLUIR, como argumento matriz, es la funcion REDUCE, omitimos el argumento filas, como argumento columnas, ponemos 1.


=LET(resta;C2:C12-B2:B12;a;EXCLUIR(REDUCE("";F2:F4;LAMBDA(X;Y;APILARH(X;FILTRAR(resta;A2:A12=Y))));;1);a)


Estamos quitando la primera columna.









Tenemos errores donde no hay datos que mostrar, usamos la funcion SI.ERROR, y, ponemos blanco en caso de que la expresión anterior devuelva error.


=LET(resta;C2:C12-B2:B12;a;SI.ERROR(EXCLUIR(REDUCE("";F2:F4;LAMBDA(X;Y;APILARH(X;FILTRAR(resta;A2:A12=Y))));;1);"");a)









Usamos APILARV, como argumento matriz1, usamos ENFILA, como argumento seleccionamos el rango G2:G4 (stock), como argumento matriz2, es la expresión anterior.


=LET(resta;C2:C12-B2:B12;a;APILARV(ENFILA(G2:G4);SI.ERROR(EXCLUIR(REDUCE("";F2:F4;LAMBDA(X;Y;APILARH(X;FILTRAR(resta;A2:A12=Y))));;1);""));a)


Tenemos la cantidad a restar para cada resta.











Creamos otra variable, usamos SCAN, omitimos el argumento valor inicial, como argumento array, usamos ELEGIRCOLS, como argumento matriz, ponemos la variable “a”, como argumento número columna1, ponemos 1.


=LET(resta;C2:C12-B2:B12;a;APILARV(ENFILA(G2:G4);SI.ERROR(EXCLUIR(REDUCE("";F2:F4;LAMBDA(X;Y;APILARH(X;FILTRAR(resta;A2:A12=Y))));;1);""));b;SCAN(;ELEGIRCOLS(a;1)

 

Ponemos LAMBDA, creamos dos variables, como argumento calculo de LAMBDA, restamos ambas variables.


=LET(resta;C2:C12-B2:B12;a;APILARV(ENFILA(G2:G4);SI.ERROR(EXCLUIR(REDUCE("";F2:F4;LAMBDA(X;Y;APILARH(X;FILTRAR(resta;A2:A12=Y))));;1);""));b;SCAN(;ELEGIRCOLS(a;1);LAMBDA(x;y;x-y));b)


Tenemos la resta de cada cantidad con el stock restante, pero, vemos que, en la primera celda, aparece el stock, y, en la última fila, un error.


Usamos EXCLUIR, como argumento matriz, es la funcion SCAN, como argumento filas, ponemos 1.


=LET(resta;C2:C12-B2:B12;a;APILARV(ENFILA(G2:G4);SI.ERROR(EXCLUIR(REDUCE("";F2:F4;LAMBDA(X;Y;APILARH(X;FILTRAR(resta;A2:A12=Y))));;1);""));b;EXCLUIR(SCAN(;ELEGIRCOLS(a;1);LAMBDA(x;y;x-y));1);b)


Copiamos la expresión, creamos otra variable, pegamos la expresión, cambiamos el argumento numero columna1 de AJUSTARCOLS por 2.


=LET(resta;C2:C12-B2:B12;a;APILARV(ENFILA(G2:G4);SI.ERROR(EXCLUIR(REDUCE("";F2:F4;LAMBDA(X;Y;APILARH(X;FILTRAR(resta;A2:A12=Y))));;1);""));b;EXCLUIR(SCAN(;ELEGIRCOLS(a;1);LAMBDA(x;y;x-y));1);c;EXCLUIR(SCAN(;ELEGIRCOLS(a;2);LAMBDA(x;y;x-y));1);c)

 

Creamos otra variable, volvemos a pegar la expresión, cambiamos el argumento número columna1 de AJUSTARCOLS por 3.


=LET(resta;C2:C12-B2:B12;a;APILARV(ENFILA(G2:G4);SI.ERROR(EXCLUIR(REDUCE("";F2:F4;LAMBDA(X;Y;APILARH(X;FILTRAR(resta;A2:A12=Y))));;1);""));b;EXCLUIR(SCAN(;ELEGIRCOLS(a;1);LAMBDA(x;y;x-y));1);c;EXCLUIR(SCAN(;ELEGIRCOLS(a;2);LAMBDA(x;y;x-y));1);d;EXCLUIR(SCAN(;ELEGIRCOLS(a;3);LAMBDA(x;y;x-y));1);d)


Usamos el argumento cálculo de LET, usamos APILARV, como argumento matriz1, ponemos la variable “b”, como argumento matriz2, ponemos la variable “c”, como argumento matriz3, ponemos la variable “d”.


=LET(resta;C2:C12-B2:B12;a;APILARV(ENFILA(G2:G4);SI.ERROR(EXCLUIR(REDUCE("";F2:F4;LAMBDA(X;Y;APILARH(X;FILTRAR(resta;A2:A12=Y))));;1);""));b;EXCLUIR(SCAN(;ELEGIRCOLS(a;1);LAMBDA(x;y;x-y));1);c;EXCLUIR(SCAN(;ELEGIRCOLS(a;2);LAMBDA(x;y;x-y));1);d;EXCLUIR(SCAN(;ELEGIRCOLS(a;3);LAMBDA(x;y;x-y));1);APILARV(b;c;d))


Usamos ENCOL, como argumento matriz, es la funcion APILARV, como argumento ignorar, seleccionamos 3.


=LET(resta;C2:C12-B2:B12;a;APILARV(ENFILA(G2:G4);SI.ERROR(EXCLUIR(REDUCE("";F2:F4;LAMBDA(X;Y;APILARH(X;FILTRAR(resta;A2:A12=Y))));;1);""));b;EXCLUIR(SCAN(;ELEGIRCOLS(a;1);LAMBDA(x;y;x-y));1);c;EXCLUIR(SCAN(;ELEGIRCOLS(a;2);LAMBDA(x;y;x-y));1);d;EXCLUIR(SCAN(;ELEGIRCOLS(a;3);LAMBDA(x;y;x-y));1);ENCOL(APILARV(b;c;d);3))

 

Aceptamos, y, ya lo tenemos.

 

















Miguel Angel Franco

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page