ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3810|回复: 19

[求助] 多品种先进先出法的计算

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-12-29 11:52 | 显示全部楼层 |阅读模式


请大神、高手、老师们帮忙,什么方法或公式可以做到G列的成本按照采购表里面的时间先后顺序进行核算,先入库的先摊,摊完前面这个批次的才能再去摊后面那个批次的,有多个产品需要去匹配,商品编号是不变的,H列是我手动计算出来的结果,可以去进行比对

多个产品先进先出法.zip

14.44 KB, 下载次数: 50

TA的精华主题

TA的得分主题

发表于 2019-12-29 13:44 | 显示全部楼层
楼主31行计算结果:87.5  有误,用程序计算应该是:52.3  吧

TA的精华主题

TA的得分主题

发表于 2019-12-29 13:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
0.1*83+0.5*88=52.3

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-29 13:54 来自手机 | 显示全部楼层
鄂龙蒙 发表于 2019-12-29 13:45
0.1*83+0.5*88=52.3

是的是的,不好意思

TA的精华主题

TA的得分主题

发表于 2019-12-29 14:32 | 显示全部楼层
附件供参考,小数不好处理。。。

多个产品先进先出法.zip

28.92 KB, 下载次数: 30

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-12-29 15:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Yalishanda30 发表于 2019-12-29 14:32
附件供参考,小数不好处理。。。

更新,增加小数处理,最小单位0.1.。。。

多个产品先进先出法.zip

29.84 KB, 下载次数: 55

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-12-29 15:26 | 显示全部楼层
  1. Sub test()
  2.   Dim r%, i%
  3.   Dim arr, brr
  4.   Dim d As Object
  5.   Application.ScreenUpdating = False
  6.   Application.DisplayAlerts = False
  7.   Set d = CreateObject("scripting.dictionary")
  8.   With Worksheets("12月采购")
  9.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  10.     arr = .Range("a2:h" & r)
  11.     For i = 1 To UBound(arr)
  12.       If Not d.exists(arr(i, 1)) Then
  13.         m = 1
  14.         ReDim brr(1 To 2, 1 To m)
  15.       Else
  16.         brr = d(arr(i, 1))
  17.         m = UBound(brr, 2) + 1
  18.         ReDim Preserve brr(1 To 2, 1 To m)
  19.       End If
  20.       brr(1, m) = arr(i, 4)
  21.       brr(2, m) = arr(i, 5)
  22.       d(arr(i, 1)) = brr
  23.     Next
  24.   End With
  25.   With Worksheets("12月销售")
  26.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  27.     arr = .Range("a2:s" & r)
  28.     ReDim crr(1 To UBound(arr), 1 To 1)
  29.     For i = 1 To UBound(arr)
  30.       sl = arr(i, 3)
  31.       cb = 0
  32.       If d.exists(arr(i, 1)) Then
  33.         brr = d(arr(i, 1))
  34.         For k = 1 To UBound(brr, 2)
  35.           If brr(1, k) > 0 Then
  36.             If brr(1, k) >= sl Then
  37.               cb = cb + sl * brr(2, k)
  38.               brr(1, k) = brr(1, k) - sl
  39.               sl = 0
  40.             ElseIf brr(1, k) < sl Then
  41.               cb = cb + brr(1, k) * brr(2, k)
  42.               brr(1, k) = 0
  43.               sl = sl - brr(1, k)
  44.             End If
  45.             d(arr(i, 1)) = brr
  46.           End If
  47.           If sl = 0 Then
  48.             Exit For
  49.           End If
  50.         Next
  51.       End If
  52.       crr(i, 1) = cb
  53.     Next
  54.     .Range("g2").Resize(UBound(crr), 1) = crr
  55.   End With
  56. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-12-29 15:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
详见附件。

多个产品先进先出法.rar

25.05 KB, 下载次数: 70

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-29 16:08 | 显示全部楼层
Yalishanda30 发表于 2019-12-29 15:26
更新,增加小数处理,最小单位0.1.。。。

谢谢老师,小花花先送上,我刚刚测试了一下,其他的地方都没有问题,就是上一个批次和下一个批次转换的过程中计算会有稍微的一点点差异,就是比如第一批是83元,第二批是88元,第一批还剩下1件未摊,然后刚好这一条销售数据是卖了2件,那么此时的平均成本的算法是(83*1+88*1)/2=85.5元,就这个地方有点差异

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-29 16:17 | 显示全部楼层

谢谢老师回答我的问题,小花先送上,我刚刚试了一下,就是上一个批次和下一个批次转换的过程当中,如果有小数点的存在就会出现计算上的偏差,比如上一个批次还剩下最后0.4件,然后当期销售了1件,那么就是83*0.4+(1-0.4)*88=86
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 03:00 , Processed in 0.038339 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表