本帖最后由 shaowu459 于 2022-11-25 00:14 编辑
使用低版本函数可以解决此问题,但公式稍微复杂,细节处理比较多,但使用365新函数中的TAKE函数和DROP函数则可轻松实现相关计算,计算逻辑变得非常简单。 F2单元格输入以下公式,向下填充到F9单元格: - =SUM(IF(E2,TAKE(DROP(TOCOL(IF((B$2:B2>=COLUMN(A:ZZ))*(A$2:A2=A2),C$2:C2,\),3),SUMIF(A$1:A1,A2,E$1)),E2)))
复制代码
公式的总体思路说明如下: 1)把每次入库的产品单价按入库数量堆叠起来。例如,入库了5个A产品,单价是10,那么就转化成5个10的数组{10;10;10;10;10},再入库3个A产品,单价是11,就继续堆叠,变成一个7行的数组:{10;10;10;10;10;11;11;11}。 2)假设第一次出库了3个A产品,那么就用TAKE函数取数组{10;10;10;10;10;11;11;11}中的前3行{10;10;10},再用SUM函数求和即可。假设第二次又出库了3个A产品,首先用DROP函数将已出库的3个产品单价去掉(去掉数组前3行),将数组变成{10;10;11;11;11},再用TAKE函数提取前3行{10;10;11}求和即可。 3)简单总结一下,思路就是将入库产品单价按个排列,一个一个的出库。将本次出库之前出库的行数去掉后,再从剩余的数组中提取本次出库数量的行数后求和。 |