先进先出的问题?

2017-07-09  本文已影响21人  叶知行

库存表

库存表

出货表

出货表

结果表

结果表

要求:根据库存表和出货表处理数据,类似先进先出的问题吧。


Sub 先进先出()
    Dim Arr, brr, crr(1 To 10000, 1 To 4)
    Set d = CreateObject("scripting.dictionary")'创建字典
    Arr = [a1].CurrentRegion'库存表,事先已经按日期编号排序好
    brr = [f1].CurrentRegion'出货表
    For j = 2 To UBound(brr)'遍历出货表
        d(brr(j, 2)) = brr(j, 3)'将出货数量放进字典
        For i = 2 To UBound(Arr)'遍历库存表
            If brr(j, 2) = Arr(i, 2) Then'如果编号相等
                k = k + 1'计数
                If Arr(i, 3) < d(Arr(i, 2)) Then'如果库存量小于出货量,添加库存数据
                    crr(k, 1) = Arr(i, 1)'日期
                    crr(k, 2) = Arr(i, 2)'编号
                    crr(k, 3) = Arr(i, 3)'库存数量
                    crr(k, 4) = Arr(i, 4)'仓位
                    d(Arr(i, 2)) = d(Arr(i, 2)) - Arr(i, 3)'减去库存数量还需要的出货数量
                Else'如果库存数量大于等于出货数量,直接读取库存数据,但数量为出货数量
                    crr(k, 1) = Arr(i, 1)'日期
                    crr(k, 2) = Arr(i, 2)'编号
                    crr(k, 3) = d(Arr(i, 2))'出货数量
                    crr(k, 4) = Arr(i, 4)'仓位
                    d(Arr(i, 2)) = d(Arr(i, 2)) - Arr(i, 3)'剩余库存数量
                    Exit For'退出循环
                End If
            End If
        Next
    Next
    [j2:m10000] = ""
    [j2].Resize(k, 4) = crr'输出数据
    [r2:s10000] = ""
    [r2].Resize(d.Count, 2) = Application.Transpose(Array(d.keys, d.items))'显示库存情况
End Sub
结果

示例文件下载

链接: http://pan.baidu.com/s/1kU8TynX 密码: ft6i

上一篇下一篇

猜你喜欢

热点阅读