3秒完成一天工作,先进先出算成本的Excel公式不收藏太可惜了!

Excel精英培讯 2025-01-11 17:02:28

在进销存管理中,最难、最复杂的一个工作就是根据销售数量,用先进先出法计算销售成本。这不,兰色在设计《Excel进销存系统》时就遇到了这个棘手的难题:

如下图所示在销售表中根据出库数量计算成本金额。

先跟兰色一起了解先进先出的计算原理。

先进先出:就是先入库的产品先出库,计算成本价时优先。

【例】如下图所示,A产品先后入库3个批次,每次的价格都不同。

情形一,A产品第一次销售20个,因为A的第1批进了50个,所以可以全部按该批次的价格算成本,成本应为:

=20*2=40

情形二,A产品第一次销售51个,那么第一批进的不够用,所以要从第二批拿出一个算成本。成本总额为:

50*2+1*5=104

情形三:A产品第一次销售70个,前两批都不够用,所以得从第三批中拿出10个算成本。

=50*2+10*4+10*9=230

情形4:A产品后续又销售了5个,因为前面已把前2批货卖完了,所以直接从第3批(价格为9)中拿货并计算成本。

=5*9=45

以后再销售以此类推。

如果你没从事过会计,估计看的有点晕了。这个公式不但要考虑入库表的所有批次价格,而且还要考虑销售表已卖的数量。所以你可以想象用Excel公式来设置有多么的难。如果都用手工,一个几百行的小表也会花费你一天的时间。

为了解决这个,用VBA编写了一个自定义函数。完美解决了先进先出算成本的难题。

=成本(H2,H$1:H2,I$1:I2,J$1:J1,B$2:B$18,C$2:C$18,D$2:D$18)

语法:

成本(商品名称,商品区域,销量区域,已计算成本区域,入库表商品名称,入库表数量区域,入库表单价区域)

参数说明:

商品名称:引用单元格中的商品名称商品区域:销售表中截止本行之前的商品列2行区域,锁定开始行,如H$1:H2销量区域:销售表中截止本行之前的销量2行区域已计算成本区域:输入公式位置的上一个单元格,要用区域的形式录入,如:J$1:J1,入库表商品名称:入库表中商品名称或商品编号区域(商品的唯一标识)入库表入库数量区域:入库表中商品入库数量所在列区域入库表单价区域:入库表中商品单价所在列区域(商品的唯一标识)

如果你也想在自已的excel中使用这个函数,就跟兰色一起操作吧。第1步 复制下面代码

Function 成本(商品, 已销商品rg As Range, 已销售数量rg As Range, 已成本rg, 商品rg As Range, 入库数量rg As Range, 单价rg As Range)Dim 入总, 总数量, 总成本, 销售数量 As Integer, 已计算销售成本arr1 = 商品rgarr2 = 入库数量rgarr3 = 单价rgarr4 = 已销商品rgarr5 = 已销售数量rgarr6 = 已成本rgFor M = 1 To UBound(arr4)If arr4(M, 1) = 商品 Then销售数量 = 销售数量 + arr5(M, 1)If M < UBound(arr4) Then 已计算销售成本 = 已计算销售成本 + arr6(M, 1)End IfNext MFor x = 1 To UBound(arr1)If 商品 = arr1(x, 1) Then'入总 = 入总 + arr2(x, 1)If 总数量 < 销售数量 ThenIf 总数量 + arr2(x, 1) < 销售数量 Then总成本 = 总成本 + arr2(x, 1) * arr3(x, 1)Else总成本 = 总成本 + (销售数量 - 总数量) * arr3(x, 1)End IfEnd If总数量 = 总数量 + arr2(x, 1)End IfNext xIf 总数量 < 销售数量 Then成本 = "销量大于库存数量,请核查"Else成本 = 总成本 - 已计算销售成本End IfEnd Function

第2步打开你的Excel表格,然后通过开发工具-Visual basic打开编辑器,再插入  -模块,然后把代码粘到右侧的窗口里。最后把文件另存为:启用宏的excel工作簿类型。

以后,在这个excel文件里就可以直接使用“成本”函数了。

0 阅读:3