標題:
[發問]
前輩關於數列減去的寫法
[打印本頁]
作者:
melvinhsu
時間:
2014-4-10 10:33
標題:
前輩關於數列減去的寫法
本帖最後由 GBKEE 於 2014-4-10 10:41 編輯
致 各位前輩 能煩替小弟解惑 ,在附件中的 檔案
小弟雖寫了些語法,但仍未能達成 ,我要的想法
在附件裡 ,
》》以多筆的資料裡 ,j欄位 為目前 g欄位(品項)的所有庫存數 。
1比對g欄位(品項) ,如不同品項,則以 h欄位(訂單數) ;作為i 欄位(可出貨數)
2.但比對g欄位(品項),如為同品,則以 j 欄位 的庫存為基準 ,依序扣除 至 庫存為0 為止,後續如還有 同品要出 ,則直接刪除 ,不繼續比對。
但在過程中,這裡遇到些狀況 ,如上一筆 扣完庫存數如還有 4個 ,下一筆 訂單是要 5個 ,但在判斷上 ,仍是得出 4個 ,但不刪除,是刪除後續的訂單。
item 訂單數 實際可出 庫存數
a 4 4 10
1 b 5 5 10
2 b 5 5 10
3 b 5 0 10 刪去
這裡由心謝過各位
作者:
melvinhsu
時間:
2014-4-10 11:23
回復
1#
melvinhsu
板大,小弟附上,[attach]17973[/attach]
作者:
GBKEE
時間:
2014-4-10 19:00
本帖最後由 GBKEE 於 2014-4-10 19:06 編輯
回復
2#
melvinhsu
試試看
Option Explicit
Sub testing3()
Dim i As Integer, D1 As Object, D2 As Object, Rng As Range
Set D1 = CreateObject("SCRIPTING.DICTIONARY") '字典物件
Set D2 = CreateObject("SCRIPTING.DICTIONARY") '字典物件
i = 2 '第2列開始
Do While Cells(i, "G") <> "" '執行迴圈條件 G欄<>""
With Cells(i, "G") 'G欄i列 的物件
If Not D1.Exists(.Value) Then '字典的key不存在
D1(.Value) = Cells(i, "J") '庫存數
D2(.Value) = 0 '出貨數總數
End If
If (D1(.Value) - D2(.Value)) >= Cells(i, "H") Then '庫存數-出貨數總數>=訂單數
Cells(i, "I") = Cells(i, "H") '訂單實際出貨數
D2(.Value) = D2(.Value) + Cells(i, "I") '訂單實際出貨數的加總
ElseIf (D1(.Value) - D2(.Value)) > 0 And (D1(.Value) - D2(.Value)) < Cells(i, "H") Then
'庫存數-出貨數總數 > 0 '庫存數-出貨數總數 > 訂單數
Cells(i, "I") = D1(.Value) - D2(.Value) '訂單實際出貨數=庫存數-出貨數總數
D2(.Value) = D2(.Value) + Cells(i, "I") '出貨數總數=出貨數總數+訂單實際出貨數
ElseIf D1(.Value) = D2(.Value) Then '無貨可出:庫存數=出貨數總數
Cells(i, "I") = ""
If Not Rng Is Nothing Then
Set Rng = Union(Rng, Range("F" & i & ":J" & i))
Else
Set Rng = Range("F" & i & ":J" & i)
End If
End If
End With
i = i + 1
Loop
If Not Rng Is Nothing Then Rng.Select
End Sub
複製代碼
作者:
melvinhsu
時間:
2014-4-10 21:28
回復
3#
GBKEE
謝謝板大,耐心的回應小弟的問題,小弟的道行真的差太遠
作者:
Andy2483
時間:
2023-4-18 14:20
本帖最後由 Andy2483 於 2023-4-18 14:28 編輯
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,變更情境為模擬出貨結餘或不足,
學習方案如下,請各位前輩指教
執行前:
[attach]36173[/attach]
執行結果:
[attach]36174[/attach]
Option Explicit
Sub TEST()
Dim Brr, Y, Lh&, Lj&, i&, Tg$, xR As Range
Set Y = CreateObject("Scripting.Dictionary")
Set xR = Range([J1], Cells(Rows.Count, "G").End(xlUp)): Brr = xR
For i = 2 To UBound(Brr)
If i = 2 Then Brr(1, 1) = "訂單量累加": Brr(1, 2) = "虛擬出貨後庫存": Brr(1, 3) = "備註"
Tg = Brr(i, 1): Lh = Brr(i, 2): Lj = Brr(i, 4)
If Y(Tg) = "" Then
Y(Tg) = Lh: Y(Tg & "庫存") = Lj
Else: Y(Tg) = Y(Tg) + Lh
End If
Y(Tg & "庫存") = Y(Tg & "庫存") - Lh
Brr(i, 1) = Y(Tg)
Brr(i, 2) = Y(Tg & "庫存")
If Brr(i, 2) < 0 Then
Brr(i, 3) = Tg & "_庫存數不足累計 " & -Brr(i, 2)
ElseIf Brr(i, 2) = 0 Then Brr(i, 3) = Tg & "_0庫存"
Else: Brr(i, 3) = Tg & "_庫存數結餘 " & Brr(i, 2)
End If
Next
With Intersect(xR.Offset(0, 4), [K:M])
.EntireColumn.ClearContents
.Value = Brr
End With
Set Y = Nothing: Set xR = Nothing: Erase Brr
End Sub
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)