先进先出的问题?
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