美文网首页
先进先出的问题?

先进先出的问题?

作者: 叶知行 | 来源:发表于2017-07-09 11:20 被阅读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

    相关文章

      网友评论

          本文标题:先进先出的问题?

          本文链接:https://www.haomeiwen.com/subject/sieshxtx.html