ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求先进先出法仓库账的代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-7-12 13:39 | 显示全部楼层 |阅读模式
在日常的流水账中,自动求出“领出”和“库存”的----“单价”、“金额”,以及“库存”的---“数量”;
要求用先进先出法!附件是我要的结果。 账页.rar (7.43 KB, 下载次数: 132)
求各位老师帮忙!谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-12 13:43 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-7-12 13:43 | 显示全部楼层
建议建两张表,一张是明细流水账表,只记录进货(或出货),此有只有添加纪录,不可删除纪录。另一张是库存表,每次进货自动添加到最后。每次出货则从上往下扣去,如此笔记录库存为0,则删除此笔纪录。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-12 14:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
基本思路应该是:
1、“入库”的比较简单,在输入“价格”和“数量”后,自动得到“金额”。
2、“出库”是最复杂的,是难点:a、出库数量的总和(一次或多次)依顺序与“入库”的各次数量比较,出完前一批的后才从下一批出库;b、出库数量无论从哪批来的最后其“数值”都无区别(出一件是一件),而比较的结果是要反应在“金额”上,即:本次出库金额由若干批次的取货数量乘以其入库时价格再相加得到。c、出库价格可以得出:出库总金额除以出库数量。
3、“库存”数量=总“入库”数量—总“出库”数量;“库存”金额=总“入库”金额—总“出库”金额;、“库存”价格=“库存”金额/“库存”数量;
4、计算以发生的行为单位。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-12 14:22 | 显示全部楼层
张三李四 发表于 2012-7-12 13:43
建议建两张表,一张是明细流水账表,只记录进货(或出货),此有只有添加纪录,不可删除纪录。另一张是库存 ...

你好,一般企业的仓库台账是要求仿照会计账目的“T"字账形式,(借贷记账法)。

TA的精华主题

TA的得分主题

发表于 2012-7-12 15:13 | 显示全部楼层
不清楚你具体的账本格式,不好办。如果有具体的账本格式应该可以解决的。

TA的精华主题

TA的得分主题

发表于 2012-7-12 16:09 | 显示全部楼层
http://club.excelhome.net/thread-845830-1-1.html

17楼 都是FIFO  反算价格对你来说很简单了

看你EXCEL等级 我想现成代码你自己都可以写了

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-12 16:36 | 显示全部楼层
本帖最后由 840205910 于 2012-7-12 16:39 编辑
张三李四 发表于 2012-7-12 15:13
不清楚你具体的账本格式,不好办。如果有具体的账本格式应该可以解决的。


你 好,账本格式就是我上传的《账页》附件。我这里每种材料一页sheet,先作日常流水账。月底盘账的代码我已有的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-14 08:45 | 显示全部楼层
出库数量与进库情况的比较的不同状态:
a:出库数量<=先进库余存数量:出库金额=出库数量*先进库价格
b:出库数量 > 先进库余存数量:出库金额=先进库余存数量*先进价格+(出库数量—先进库余存数量)*后进价格

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-14 10:48 | 显示全部楼层
本帖最后由 840205910 于 2012-7-14 10:58 编辑

网上搜到的,再整理了一下,还真可以达到先进先出的效果;不过毕竟是人家写的,吃进去了却不好消化,理解不了!

Private Sub Worksheet_Change(ByVal Target As Range)
lie = Target.Column
ha = Target.Row
If lie = 7 Or lie = 6 Then
Cells(ha, 8) = Cells(ha, 6) * Cells(ha, 7)
End If

If lie = 8 Then
If Cells(ha, 6) = 0 Then
Cells(ha, 7) = 0
Else
Cells(ha, 7) = Cells(ha, 8) / Cells(ha, 6)
End If
End If

End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
wsh = ActiveCell.Row
If wsh < 6 Then
End
End If
If ActiveCell.Column = 6 And Cells(wsh, 1) = 0 Then
Cells(wsh, 1).Select
End If
If ActiveCell.Column = 10 Then
If Cells(wsh, 9) = 0 Then
Cells(wsh, 10) = 0
Cells(wsh, 11) = 0
Cells(wsh + 1, 1).Select
End
End If
'*************************
For a = wsh To 5 Step -1'按退一行的阶步从whs向上到5行
    lja = lja + Cells(a, 6) '总进库数量
    ca = lja - Cells(wsh, 12) '余库存数量
        If ca > 0 Then
            Exit For '退出循环
        End If
Next
If ca >= Cells(wsh, 9) Then '余库存数量>=现出库数量
    Cells(wsh, 11) = Cells(wsh, 9) * Cells(a, 7) '出库金额=出库数量*先进价格
    Cells(wsh, 10) = Cells(wsh, 11) / Cells(wsh, 9)
Cells(wsh + 1, 1).Select
    End
Else '否则的话
    Cells(wsh, 11) = ca * Cells(a, 7) '出库金额=余库存数量*先进价格
    Cells(wsh, 10) = Cells(wsh, 11) / Cells(wsh, 9)
End If
a = a - 1


'***************************
For b = a To 5 Step -1'按退一步的阶步从a到5行

    ljb = ljb + Cells(b, 6)'不知如何理解
    cb = ljb - (Cells(wsh, 9) - ca)'如何理解??????
        If cb >= 0 Then
            Exit For
        End If
Next
Cells(wsh, 11) = Cells(wsh, 11) + WorksheetFunction.Sum(Range("h" & b & ":h" & a)) - cb * Cells(b, 7)'如何理解?????
Cells(wsh, 10) = Cells(wsh, 11) / Cells(wsh, 9)
Cells(wsh + 1, 1).Select
End If



'***************************************************
For Y = 5 To Range("a65536").End(xlUp).Row
If Range("f" & Y) + Range("i" & Y) = 0 Then
Range("l" & Y) = 0
Else
Range("l" & Y) = WorksheetFunction.Sum(Range("f" & 5 & ":f" & Y)) - WorksheetFunction.Sum(Range("i" & 5 & ":i" & Y))
End If
'*************
  If Range("h" & Y) + Range("k" & Y) = 0 Then
Range("n" & Y) = 0
Else
Range("n" & Y) = WorksheetFunction.Sum(Range("h" & 5 & ":h" & Y)) - WorksheetFunction.Sum(Range("k" & 5 & ":k" & Y))
End If
'**************
If Range("l" & Y) = 0 Then
Range("m" & Y) = 0
Else
Range("m" & Y) = Range("n" & Y) / Range("l" & Y)
End If
Next
'********************************************************



End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-1 03:21 , Processed in 0.051518 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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