- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
37#
發表於 2022-9-17 16:58
| 只看該作者
謝謝 兩位前輩
今天習得
1.倒入字典迴圈化
2.預設2條件吻合才加總- Option Explicit
- Sub 倉庫庫存_20220917()
- Application.ScreenUpdating = False
- Dim x&, i&, 值(1 To 17) As Long, QA, QB, T, S, Srr, Arr, Ac, xR, C
- Dim Trr, Brr, Crr, Rs, Rq1s, Rq1n, Ras, Ran, B, 欄d, 特rr, Drr
- Dim Rq2s, Rq2n, XA
- T = Timer
- Set Srr = CreateObject("Scripting.Dictionary")
- Set Trr = CreateObject("Scripting.Dictionary")
- Set 特rr = CreateObject("Scripting.Dictionary")
- ' 0 1 2 3 4 5 6 7 8
- S = Split("倉庫庫存,入庫明細,全機種BOM,A需求,B需求,指圖明細,公司盤點,退庫,廢料倉", ",")
- For i = 1 To UBound(S)
- Set Srr(i) = Sheets(S(i))
- Set Trr(i) = CreateObject("Scripting.Dictionary")
- Set 特rr(i) = CreateObject("Scripting.Dictionary")
- Next
- Rs = Rows.Count
- Ac = Sheets(S(0)).Cells(Rs, 1).End(3).Row
- Arr = Range(Sheets(S(0)).[N4], Sheets(S(0)).Cells(Ac, 1))
- 'vS, vC,zS, zC,xS,xC,zS, zC,zV
- 特rr(1) = Array("", 1, 18, 1, 15, 0, 1, 1, 99, "") '入庫合計
- 特rr(2) = Array("", 2, 26, 2, 16, 0, 1, 2, 99, "") '公司總需求
- 特rr(3) = Array("", 3, 8, 3, 1, 0, 1, 3, 99, "") 'A倉
- 特rr(4) = Array("", 4, 8, 4, 1, 0, 1, 4, 99, "") 'B倉
- 特rr(5) = Array("", 5, 12, 5, 6, 0, 1, 5, 99, "") '總出貨
- 特rr(6) = Array("", 6, 7, 6, 1, 0, 1, 6, 99, "") '公司盤點
- 特rr(7) = Array("", 7, 3, 7, 1, 0, 1, 7, 99, "") 'B倉
- 特rr(8) = Array("", 8, 3, 8, 1, 0, 1, 8, 99, "") 'B倉
- For i = 1 To UBound(S)
- Set Rq1s = Srr(特rr(i)(3)).Cells(1, 特rr(i)(4))
- Set Rq1n = Srr(特rr(i)(3)).Cells(Rs, 特rr(i)(4)).End(3)
- Brr = Srr(特rr(i)(3)).Range(Rq1s, Rq1n)
-
- Set Rq2s = Srr(特rr(i)(7)).Cells(1, 特rr(i)(8))
- Set Rq2n = Srr(特rr(i)(7)).Cells(Rq1n.Row, 特rr(i)(8))
- Drr = Srr(特rr(i)(7)).Range(Rq2s, Rq2n)
- Set Ras = Srr(特rr(i)(1)).Cells(1, 特rr(i)(2))
- Set Ran = Srr(特rr(i)(1)).Cells(Rq1n.Row, 特rr(i)(2))
- Crr = Srr(特rr(i)(1)).Range(Ras, Ran)
- For x = 1 To UBound(Brr)
- B = Brr(x, 1)
- If InStr(Drr(x, 1), 特rr(i)(9)) Or Drr(x, 1) & 特rr(i)(9) = "" Then
- Trr(i)(B) = Trr(i)(B) + Crr(x, 1)
- End If
- Next
- Next
- For i = 1 To Ac - 3
- xR = Arr(i, 1)
- QA = Trr(1)(xR) + Trr(6)(xR) '倉庫庫存
- QB = Trr(7)(xR) + Trr(8)(xR)
- Arr(i, 5) = Trr(1)(xR) '入庫合計
- Arr(i, 13) = Trr(5)(xR) '總出貨
- Arr(i, 3) = Trr(2)(xR) '總需求
- Arr(i, 8) = QA - QB - Trr(3)(xR) - Trr(4)(xR) - Trr(5)(xR) '公司倉
- Arr(i, 9) = Trr(4)(xR) 'B倉
- Arr(i, 10) = Trr(3)(xR) 'A倉
- Arr(i, 7) = QA - QB - Trr(5)(xR) '總數
- Arr(i, 4) = Trr(6)(xR)
- Arr(i, 11) = Trr(7)(xR)
- Arr(i, 12) = Trr(8)(xR)
- If Arr(i, 3) > 0 Then
- XA = Trr(6)(xR) + Trr(1)(xR) - Trr(7)(xR) - Trr(8)(xR) - Arr(i, 3)
- If XA >= 0 Then XA = 0
- Else
- XA = 0
- End If
- If Trr(1)(xR) = 0 Then Arr(i, 5) = 0
- If Trr(6)(xR) = 0 Then Arr(i, 4) = 0
- If Trr(2)(xR) = 0 Then Arr(i, 3) = 0
- If Trr(5)(xR) = 0 Then Arr(i, 13) = 0
- Arr(i, 6) = XA
- Next i
- C = Array(, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
- For i = 1 To UBound(C)
- Sheets(S(0)).Cells(4, C(i)).Resize(UBound(Arr), 1) = Application.Index(Arr, , C(i))
- Next
- MsgBox "共耗時:" & Timer - T & " 秒"
- End Sub
複製代碼 |
|