- 帖子
- 406
- 主題
- 8
- 精華
- 0
- 積分
- 453
- 點名
- 0
- 作業系統
- WINDOWS 7
- 軟體版本
- 2007
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2015-2-7
- 最後登錄
- 2021-7-31
|
本帖最後由 n7822123 於 2020-3-31 00:47 編輯
回復 3# qaqa3296
先假定你的流水號從上到下都是由小到大
(如果流水號沒有規律且要按照流水號來決定出貨順序,會更燒腦.........)
試試看吧! 本來想用2個字典的,不過有什麼東西是1個字典還搞不定的呢?
最多也只是資料長一點點.....................
Sub Ship()
Set D = CreateObject("Scripting.Dictionary")
Arr = Range([庫存!C2], [庫存!A5000].End(3))
For R = 1 To UBound(Arr) '料件X:>日期1,庫存1>日期2,庫存2>日期3,庫存3...........
D(Arr(R, 1)) = D(Arr(R, 1)) & ">" & Arr(R, 2) & "," & Arr(R, 3)
Next
Sheets("結果").Activate
For R = 2 To [A5000].End(3).Row
Key$ = Cells(R, 2)
LData = D(Key)
If LData = "" Then
Cells(R, 4) = "沒有資料"
Cells(R, 5) = "數量不足"
GoTo 下一流水號
End If
Data = Split(LData, ">")
Ci = 4 'D欄開始填
需求 = Cells(R, 3)
For i = 1 To UBound(Data)
日期 = Split(Data(i), ",")(0)
庫存 = Split(Data(i), ",")(1)
If 庫存 = 0 And i = UBound(Data) Then '最後一筆也是庫存0
Cells(R, Ci) = "沒有資料"
Cells(R, Ci + 1) = "數量不足"
GoTo 下一流水號
End If
If 庫存 = 0 Then GoTo 下一庫存 '非最後一筆,庫存0
If 庫存 - 需求 >= 0 Then
Cells(R, Ci) = 日期
Cells(R, Ci + 1) = 需求
庫存 = 庫存 - 需求
Data(i) = 日期 & "," & 庫存
GoTo 已出貨完
Else '庫存 - 需求 <0
Cells(R, Ci) = 日期
Cells(R, Ci + 1) = 庫存
需求 = 需求 - 庫存
Ci = Ci + 2
Data(i) = 日期 & "," & 0
If i = UBound(Data) And 需求 > 0 Then '最後一個庫存也無法滿足出貨
Cells(R, Ci) = "沒有資料"
Cells(R, Ci + 1) = "數量不足"
End If
End If
下一庫存: Next i
已出貨完: '(已經0庫存 或者 滿足出貨需求)
LData = Join(Data, ">")
D(Key) = LData
Debug.Print Key & ":" & LData
下一流水號: Next R
End Sub |
|