Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3602|回复: 8

[已解决]先进先出求发出单价。

[复制链接]
发表于 2014-5-25 14:10 | 显示全部楼层 |阅读模式
Book1.zip (21.75 KB, 下载次数: 15)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-5-25 20:05 | 显示全部楼层
咱也想知道!不过看你的表好像有问题!
回复

使用道具 举报

 楼主| 发表于 2014-5-25 20:29 | 显示全部楼层
su45 发表于 2014-5-25 20:05
咱也想知道!不过看你的表好像有问题!

有什么问题,指点一下
回复

使用道具 举报

发表于 2014-5-25 20:38 | 显示全部楼层
你要做什么?别说专业很了。直接说你的要求行不
回复

使用道具 举报

 楼主| 发表于 2014-5-25 21:17 | 显示全部楼层
pengyx 发表于 2014-5-25 20:38
你要做什么?别说专业很了。直接说你的要求行不

就是按批次管理,先入先发出,求发出的金额及单价
回复

使用道具 举报

发表于 2014-5-25 21:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zjdh 于 2014-5-26 10:58 编辑

先进先出单价.rar (19.88 KB, 下载次数: 47)
回复

使用道具 举报

 楼主| 发表于 2014-5-25 22:47 | 显示全部楼层
本帖最后由 黑山上的鹰 于 2014-5-26 00:50 编辑
zjdh 发表于 2014-5-25 21:45


非常感谢你,我想到了,把你的程序改了一下,可以被其他程序调用了,符合我的要求,困扰两年的问题就这样被解决了。Sub TEST()
    ReDim RK(1 To 2, 1 To 1)
    Cells(10, 7).Select
    For I = 6 To Range("A65536").End(3).Row
        If Cells(I, 3) <> "" Then  '有入库
            R = R + 1
            ReDim Preserve RK(1 To 2, 1 To R)
            RK(1, R) = Cells(I, 3)   '数量
            RK(2, R) = Cells(I, 4)   '单价
        End If
        If Cells(I, 6) > 0 Then   '有出库
            ZJ = 0
            ZS = 0
            CK = Cells(I, 6)
            For J = 1 To R
                If ZS = Cells(I, 6) Then Exit For  '够数
                If RK(1, J) > Cells(I, 6) Then     '一笔够数
                    RK(1, J) = RK(1, J) - CK
                    ZJ = ZJ + RK(2, J) * CK
                    ZS = ZS + CK
                Else                               '一笔不够数
                    ZS = ZS + RK(1, J)
                    ZJ = ZJ + RK(1, J) * RK(2, J)
                    CK = CK - RK(1, J)
                    RK(1, J) = 0
                End If
            Next
            Cells(I, 7) = ZJ / ZS      '单价
            Cells(I, 8) = ZJ           '金额
        End If
    Next
End Sub
回复

使用道具 举报

发表于 2014-5-26 10:51 | 显示全部楼层
改一下更合理一点
Sub TEST()
    ReDim RK(1 To 2, 1 To 1)
    For I = 6 To Range("A65536").End(3).Row
        If Cells(I, 3) <> "" Then  '有入库
            R = R + 1
            ReDim Preserve RK(1 To 2, 1 To R)
            RK(1, R) = Cells(I, 3)   '数量
            RK(2, R) = Cells(I, 4)   '单价
        End If
        If Cells(I, 6) > 0 Then   '有出库
            ZJ = 0
            ZS = 0
            CK = Cells(I, 6)
            For J = 1 To R
                If ZS = Cells(I, 6) Then Exit For  '够数了
                If RK(1, J) > CK Then     '一笔够数
                    RK(1, J) = RK(1, J) - CK
                    ZJ = ZJ + RK(2, J) * CK
                    ZS = ZS + CK
                Else                               '一笔不够数
                    ZS = ZS + RK(1, J)
                    ZJ = ZJ + RK(1, J) * RK(2, J)
                    CK = CK - RK(1, J)
                    RK(1, J) = 0
                End If
            Next
            Cells(I, 7) = ZJ / ZS      '单价
            Cells(I, 8) = ZJ           '金额
        End If
    Next
End Sub
回复

使用道具 举报

发表于 2014-5-26 13:51 | 显示全部楼层
留个记号,好好研究一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 21:28 , Processed in 2.089628 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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