|
在使用Excel進(jìn)行庫(kù)存管理時(shí),我們需要計(jì)算庫(kù)存成本(包括當(dāng)前庫(kù)存成本以及每次出庫(kù)的成本)。當(dāng)涉及到同一物品多次出庫(kù)入庫(kù)時(shí),這種計(jì)算需要按照預(yù)先指定的規(guī)則進(jìn)行,常用的規(guī)則有:
不管是FIFO,還是LIFO,實(shí)際計(jì)算的時(shí)候都比較復(fù)雜。主要是很難利用Excel公式進(jìn)行自動(dòng)化的計(jì)算工作。 用Excel進(jìn)行庫(kù)存管理時(shí),我們建議維護(hù)兩張表:
其中,入庫(kù)表的數(shù)據(jù)是手工輸入的。出庫(kù)表的前4列是手工輸入的,出庫(kù)單件是需要計(jì)算的(即出庫(kù)成本)。 很明顯,要計(jì)算入庫(kù)后的平均單價(jià)很容易。比如,要計(jì)算2022/2/10的庫(kù)存成本(在這一天,所有的入庫(kù)已經(jīng)完成,并且沒(méi)有發(fā)生任何出庫(kù)操作) 只要將入庫(kù)量和價(jià)格做加權(quán)平均就好了: 但是一旦發(fā)生一次出庫(kù),比如要計(jì)算2022/3/2的庫(kù)存成本,就需要知道2022/3/1這次出庫(kù)是從哪些入庫(kù)記錄中進(jìn)行的。尤其是,如果出庫(kù)涉及多條入庫(kù)時(shí),這個(gè)計(jì)算并不容易。 注:這兩個(gè)表是簡(jiǎn)化后的表,只有必要的字段,實(shí)際場(chǎng)景可能需要更多的字段。不過(guò)不影響我們對(duì)這個(gè)問(wèn)題的理解。 注:很多使用Excel管理庫(kù)存的朋友喜歡在一張表上同時(shí)維護(hù)入庫(kù)和出庫(kù)信息,實(shí)際上也沒(méi)有問(wèn)題。本文介紹的方法很容易就可以移植到這種場(chǎng)景中。 注:還有很多朋友喜歡在一張表上同時(shí)維護(hù)入庫(kù)、出庫(kù)和當(dāng)前庫(kù)存信息。強(qiáng)烈不建議這么做。在Excel中這么做會(huì)帶來(lái)很多不利的影響。在“Excel工作的標(biāo)準(zhǔn)模式”課程中,我們?cè)敿?xì)介紹過(guò),這里就不重復(fù)了。實(shí)際上,當(dāng)前庫(kù)存可以很容易通過(guò)函數(shù)得到。 注:本文案例中入庫(kù)表和出庫(kù)表只有一種物品,并且是按照日期順序進(jìn)行升序排列。實(shí)際情況并不如此,但是我們?nèi)匀豢梢赃@么假設(shè),因?yàn)槲覀兛梢酝ㄟ^(guò)FILTER函數(shù)和SORT函數(shù)輕松達(dá)到這樣的要求。 下面我們先以手工的方式分析第一次出庫(kù)時(shí)FIFO的操作。 在計(jì)算庫(kù)存成本時(shí),其實(shí)最重要的就是要知道每次出庫(kù)需要從哪些入庫(kù)記錄中進(jìn)行操作,所以下面的分析就集中在這個(gè)環(huán)節(jié)。
最左邊是入庫(kù)記錄,按照入庫(kù)日期升序。最右邊是出庫(kù)數(shù)量:100。
這是非常清晰的一個(gè)過(guò)程。如果用VBA寫程序,只需要一個(gè)循環(huán)即可。可惜,VBA的門檻稍高,而且在很多公司,VBA是禁用的。 如果改用傳統(tǒng)的Excel函數(shù)來(lái)做這件事情,會(huì)發(fā)現(xiàn)非常困難,幾乎沒(méi)有辦法做到自動(dòng)化的處理,需要依賴中間表和手工的干預(yù),很不理想。 但是借助LAMBDA函數(shù),我們可以輕松實(shí)現(xiàn)庫(kù)存成本的計(jì)算。 我們要借助于遞歸,不熟悉這個(gè)概念的朋友可以參見(jiàn)Excel這個(gè)函數(shù)功能竟然暗合孫子兵法 - 詳說(shuō)遞歸函數(shù):什么是遞歸?遞歸能干什么?遞歸怎么做?。
我們的目標(biāo)是計(jì)算需要出庫(kù)的數(shù)量(OUT_QTY)在入庫(kù)記錄表S中的分布情況,假設(shè)這個(gè)計(jì)算可以通過(guò)函數(shù): F(out_qty, S) 來(lái)完成。 我們將S分成兩部分:q和Q, 其中q就是S的第一條記錄,Q是剩余的記錄。 根據(jù)FIFO的原則,我們首先處理q,使用函數(shù): F(out_qty, q) 由于q只有一條記錄,因此它很簡(jiǎn)單就可以解決: 處理完q后,剩余需要出庫(kù)的數(shù)量變成了: out_qty_rest = out_qty - F(out_qty, q) 這些數(shù)量就需要在Q中進(jìn)行出庫(kù): F(out_qty_rest, Q) 我們需要的結(jié)果就是: 根據(jù)上面的分析,我們可以實(shí)現(xiàn)下面的自定義函數(shù):
可以直接調(diào)用這個(gè)函數(shù): 得到這樣的結(jié)果:
出庫(kù)明細(xì)有了,我們是本次出庫(kù)的平均單價(jià),還是出庫(kù)后的庫(kù)存平均單價(jià)都很容易計(jì)算了。 我們這里只是處理了一次出庫(kù)的情況。要處理后續(xù)出庫(kù)的情況,還需要進(jìn)行多一些的處理。傳統(tǒng)的函數(shù)方案在進(jìn)行到這一步時(shí),也會(huì)遇到比較大的問(wèn)題。不過(guò)使用我們這里的方案,就很簡(jiǎn)單了,只要計(jì)算出在本次出庫(kù)前庫(kù)存明細(xì),并且將這個(gè)庫(kù)存明細(xì)作為當(dāng)前出庫(kù)的依據(jù),從而使用FIFO進(jìn)行出庫(kù)即可。
這個(gè)自定義函數(shù)計(jì)算給定日期之前的庫(kù)存明細(xì)。其中, 1. in_qty_col,為入庫(kù)記錄的數(shù)量列 2. qty_out,為給定日期之前所有出庫(kù)的數(shù)量總和 3. 通過(guò)FIFO函數(shù)計(jì)算歷史上所有出庫(kù)數(shù)量總和在入庫(kù)記錄上的明細(xì),并用入庫(kù)記錄減去這個(gè)出庫(kù)明細(xì),即得到給定日期時(shí)的庫(kù)存分布。 通過(guò)下面的自定義函數(shù)即可計(jì)算本次出庫(kù)的平均單價(jià):
其中,
最后,用這個(gè)出庫(kù)明細(xì),結(jié)合入庫(kù)時(shí)每次記錄的單價(jià),加權(quán)平均即可得到本次出庫(kù)的平均單價(jià)了。這個(gè)公式在本文開(kāi)頭就介紹過(guò)了。 詳細(xì)解釋請(qǐng)看視頻 加入E學(xué)會(huì),永久免費(fèi)學(xué)習(xí)更多Excel應(yīng)用技巧 http://www./portal/learn/class_list Excel+Power Query+Power Pivot+Power BI 自定義函數(shù) 底部菜單:知識(shí)庫(kù)->自定義函數(shù) 面授培訓(xùn) 底部菜單:培訓(xùn)學(xué)習(xí)->面授培訓(xùn) Excel企業(yè)應(yīng)用 底部菜單:企業(yè)應(yīng)用 也可以在歷史文章中學(xué)習(xí)Excel,Power Query,Power Pivot,Power BI,Power Automate各種技巧。 |
|
|