庫(kù)存表

庫(kù)存表
出貨表

出貨表
結(jié)果表

結(jié)果表
要求:根據(jù)庫(kù)存表和出貨表處理數(shù)據(jù),類似先進(jìn)先出的問(wèn)題吧。
Sub 先進(jìn)先出()
Dim Arr, brr, crr(1 To 10000, 1 To 4)
Set d = CreateObject("scripting.dictionary")'創(chuàng)建字典
Arr = [a1].CurrentRegion'庫(kù)存表,事先已經(jīng)按日期編號(hào)排序好
brr = [f1].CurrentRegion'出貨表
For j = 2 To UBound(brr)'遍歷出貨表
d(brr(j, 2)) = brr(j, 3)'將出貨數(shù)量放進(jìn)字典
For i = 2 To UBound(Arr)'遍歷庫(kù)存表
If brr(j, 2) = Arr(i, 2) Then'如果編號(hào)相等
k = k + 1'計(jì)數(shù)
If Arr(i, 3) < d(Arr(i, 2)) Then'如果庫(kù)存量小于出貨量,添加庫(kù)存數(shù)據(jù)
crr(k, 1) = Arr(i, 1)'日期
crr(k, 2) = Arr(i, 2)'編號(hào)
crr(k, 3) = Arr(i, 3)'庫(kù)存數(shù)量
crr(k, 4) = Arr(i, 4)'倉(cāng)位
d(Arr(i, 2)) = d(Arr(i, 2)) - Arr(i, 3)'減去庫(kù)存數(shù)量還需要的出貨數(shù)量
Else'如果庫(kù)存數(shù)量大于等于出貨數(shù)量,直接讀取庫(kù)存數(shù)據(jù),但數(shù)量為出貨數(shù)量
crr(k, 1) = Arr(i, 1)'日期
crr(k, 2) = Arr(i, 2)'編號(hào)
crr(k, 3) = d(Arr(i, 2))'出貨數(shù)量
crr(k, 4) = Arr(i, 4)'倉(cāng)位
d(Arr(i, 2)) = d(Arr(i, 2)) - Arr(i, 3)'剩余庫(kù)存數(shù)量
Exit For'退出循環(huán)
End If
End If
Next
Next
[j2:m10000] = ""
[j2].Resize(k, 4) = crr'輸出數(shù)據(jù)
[r2:s10000] = ""
[r2].Resize(d.Count, 2) = Application.Transpose(Array(d.keys, d.items))'顯示庫(kù)存情況
End Sub

結(jié)果
示例文件下載
鏈接: http://pan.baidu.com/s/1kU8TynX 密碼: ft6i