- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
5#
發表於 2022-9-14 14:40
| 只看該作者
本帖最後由 Andy2483 於 2022-9-14 14:41 編輯
回復 4# s3526369
謝謝前輩發表此主題
後學習得很多技巧
1.WorksheetFunction.SumIf的用法
2.工作表放入字典
3.陣列局部放入儲存格
後學的以下方法只節省一點點時間,供前輩參考
拋磚引玉,後學也想學厲害的前輩們的指導- Sub TEST_1()
- Application.ScreenUpdating = False
- Dim X, i As Long, DA, BA, bb, BC, FY, FX, EY, QA, QB, T
- Dim S, Srr, Arr, Ac, xR, c, xC
- T = Timer
- Set Srr = CreateObject("Scripting.Dictionary")
- '0 1 2 3 4 5
- S = Split("入庫明細,全機種BOM,A需求,b需求,指圖明細,倉庫庫存", ",")
- For i = 0 To UBound(S)
- Set Srr(i) = Sheets(S(i))
- Next
- Ac = Srr(5).Cells(Rows.Count, 1).End(3).Row
- Arr = Range(Srr(5).[N4], Srr(5).Cells(Ac, 1))
- For i = 1 To Ac - 3
- xR = Arr(i, 1)
- Arr(i, 5) = WorksheetFunction.SumIf(Srr(0).[O:O], xR, Srr(0).[R:R]) '入庫合計
- Arr(i, 3) = WorksheetFunction.SumIf(Srr(1).[P:P], xR, Srr(1).[Z:Z]) '公司總需求
- Arr(i, 10) = WorksheetFunction.SumIf(Srr(2).[A:A], xR, Srr(2).[H:H]) 'A倉
- Arr(i, 9) = WorksheetFunction.SumIf(Srr(3).[A:A], xR, Srr(3).[H:H]) 'B倉
- Arr(i, 13) = WorksheetFunction.SumIf(Srr(4).[F:F], xR, Srr(4).[L:L]) '總出貨
- QA = Arr(i, 4) + Arr(i, 5) ' ''倉庫庫存
- QB = Arr(i, 11) + Arr(i, 12)
- Arr(i, 8) = QA - QB - Arr(i, 10) - Arr(i, 9) - Arr(i, 13) ''公司倉
- Arr(i, 7) = QA - QB - Arr(i, 13) ''總數
- Next i
- c = Array(, 3, 5, 7, 8, 9, 10, 13)
- For i = 1 To UBound(c)
- Srr(5).Cells(4, c(i)).Resize(UBound(Arr), 1) = Application.Index(Arr, , c(i))
- Next
- MsgBox "共耗時:" & Timer - T & " 秒"
- End Sub
複製代碼 |
|