如何用Excel函數實現"先進先出"貨物管理?

以下文章來源於Excel進修與實戰 ,作者隨風

先進先出”這個詞想必(emmmm可能、也許、大概、似乎?)大家都不陌生。

某度的解釋是這樣式的:**************。由於字比較多,我就不打了。

先進先出,顧名思義(這個成語我比較喜歡)先來的先走,後來的後走。

從庫存管理維度來講:某一個產品,分別在不同時間入庫了4個批次,按照時間的先後順序分別為第一批,第二批,第三批,第四批,那麼在出庫的時候,就要優先出第一批的貨,直至第一批貨消化完,開始出第二批貨,依此類推。

特點:

1、先進先出可以對庫存的庫齡進行精準的統計,以保證相對合理的庫齡結構,在制定庫存消化方案的時候,庫齡是一個必不可少的參考指標。

2、先進先出可以最大限度的確保時令產品的保質期。

舉個例子,某超市,先後採購了四批白菜,為了最大限度的降低白菜由於庫存時間過長導致的腐爛或者不新鮮,在上架銷售的時候,需要優先從最早入庫的那批開始出庫,具體數據如下圖所示:

如何用Excel函數實現

以批次號保存的庫存數據


如何用Excel函數實現

以物料保存的出庫數據

需求解析:白菜合計出庫439,按照先進先出的原則,優先將第-01批次的149個庫存消耗掉,然後依次消耗-05批次的171個庫存與-09批次的103個庫存。

也就是:149+171+103=423, 最後剩下的16個庫存從-13批次消耗,最終實現先入庫的庫存優先消耗。最終形成結果如下圖所示:

如何用Excel函數實現

實現方法:

首先我們需要將出庫的數據引用過來,在本示例中Vlookup即可。

如何用Excel函數實現

引用之後我們發現,如果發貨的數量大於批次庫存數量,最多也只能發該批次的庫存數量。第一反應:


=IF(VLOOKUP(B3,出庫!A:B,2,0)>C3,C3,VLOOKUP(B3,出庫!A:B,2,0))

簡化後得到如下公式:


=MIN(C3,VLOOKUP(B3,出庫!A:B,2,0))

也就是取庫存和發貨數的最小值,形成結果如下圖所示:

如何用Excel函數實現

這個時候我們發現最後一次批次庫存全部扣減了,實際上只應該扣減439-149-171-103=16個才對,也就是說,我們要取的不僅僅是庫存和發貨數的最小值,而是庫存和剩餘未發貨數的最小值

其中白菜的最後一個批次剩餘的發貨數量應為439-(149+171+103),其中439已知是我們Vlookup函數引用過來的,剩下的就是前三個批次的發貨數量,進一步觀察,發現前三個數就是在本批次之前所有白菜的發貨數量之和。條件求和SUMIF浮於眼前。

結合單元格區域的混合引用,每次都是扣減本單元格之前的單元格符合條件的和。得到如下公式:


=MIN(C3,VLOOKUP(B3,出庫!A:B,2,)-SUMIF(B$2:B2,B3,D$2:D2))

如何用Excel函數實現

至此,先進先出就已經搞定了,但是下邊的錯誤值看起來有點不美。第一反應:


=IFERROR(原公式,0)

但是轉念一想,不對,我引用的是數字,並且我能保證被引用區域中沒有重複的項目,因此完全可以。。。。。。。

如何用Excel函數實現

=MIN(C3,SUMIF(出庫!A:A,B3,出庫!B:B)-SUMIF(B$2:B2,B3,D$2:D2))

當然了 ,用sumif優化公式還有一個目的,多批次出庫時,我們需要對出庫數量求和之後,再按照先進先出法匹配出庫批次,因此使用sumif,完全可以實現此需求。

最後說一句很重要的話:此方法需要將同一個產品的批次按照升序排列,以保證先入庫的批次始終在前邊。

打完收工。

隨後思考:在出庫數據源中,出庫的數量是按月的,那麼怎樣做到下圖:

如何用Excel函數實現


每個批次最後消耗到哪一天,開始消耗下一個批次的庫存?



分享到:


相關文章: