- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
8#
發表於 2023-5-16 10:01
| 只看該作者
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
資料表:(出貨明細)
結果表執行前:
執行結果:
Option Explicit
Sub TEST()
Dim Brr, Crr, Y, i&, T$, Sh(2)
'↑宣告變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y變數是 字典
Set Sh(1) = Sheets("未結訂單"): Set Sh(2) = Sheets("出貨明細")
'↑令Sh這一維陣列1~2索引號值各以工作表帶入
Brr = Sh(1).[A1].CurrentRegion: Crr = Sh(2).[A1].CurrentRegion
'↑令Brr,Crr變數各是二維陣列,各以儲存格值帶入陣列中
For i = 2 To UBound(Crr)
T = Crr(i, 1) & "|" & Crr(i, 2): Y(T) = Y(T) + Crr(i, 3)
Next
'↑設迴圈組合(訂單單號|料號)新字串當key,item是數量累加,納入Y字典裡
For i = 2 To UBound(Brr)
T = Brr(i, 1) & "|" & Brr(i, 2): Brr(i - 1, 1) = Brr(i, 3) - Y(T)
Next
'↑設迴圈將(訂單單號|料號)組合成的新字串查Y字典得到item值,
'當被減數做扣除,寫入Brr陣列的第1欄
Sh(1).[D2].Resize(UBound(Brr) - 1, 1) = Brr
'↑將Brr陣列值寫入"未結訂單"表結果欄中
Application.Goto Sh(1).[D2].Resize(UBound(Brr) - 1, 1)
'↑令儲存格游標跳到 "未結訂單"表結果欄中
Set Y = Nothing: Erase Brr, Crr, Sh
'↑令釋放變數
End Sub |
|