請問sumif 改寫成字典或是array讓執行速度變快
- 帖子
- 46
- 主題
- 3
- 精華
- 0
- 積分
- 73
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2018-2-12
- 最後登錄
- 2025-9-17
|
請問sumif 改寫成字典或是array讓執行速度變快
以下是我目前可以執行 但是運算時間有點久
請問有更好的方法可以去取代嗎- Sub 倉庫庫存合計()
- Dim X, i As Long
- For i = 4 To Sheets("倉庫庫存").[A1000].End(3).Row
- X = WorksheetFunction.SumIf(Sheets("入庫明細").Range("O2:O600"), Sheets("倉庫庫存").Cells(i, 1), Sheets("入庫明細").Range("R2:R600")) '入庫合計
- DA = WorksheetFunction.SumIf(Sheets("全機種BOM").Range("P:P"), Sheets("倉庫庫存").Cells(i, 1), Sheets("全機種BOM").Range("Z:Z")) '公司總需求
- BA = WorksheetFunction.SumIf(Sheets("A需求").Range("A:A"), Sheets("倉庫庫存").Cells(i, 1), Sheets("A需求").Range("H:H")) 'A倉
- bb = WorksheetFunction.SumIf(Sheets("b需求").Range("A:A"), Sheets("倉庫庫存").Cells(i, 1), Sheets("B需求").Range("H:H")) 'B倉
- BC = WorksheetFunction.SumIf(Sheets("指圖明細").Range("F:F"), Sheets("倉庫庫存").Cells(i, 1), Sheets("指圖明細").Range("L:L")) '總出貨
- FY = WorksheetFunction.SumIf(Sheets("出庫明細").Range("H2:H600"), Sheets("廢料倉").Cells(i, 1) & Sheets("廢料倉").Cells(1, 1), Sheets("出庫明細").Range("I2:I600")) '廢料
- FX = WorksheetFunction.SumIf(Sheets("指圖明細").Range("F2:F2000"), Sheets("廢料倉").Cells(i, 1), Sheets("指圖明細").Range("K2:K2000")) '廢料
- EY = WorksheetFunction.SumIf(Sheets("出庫明細").Range("H2:H600"), Sheets("退庫").Cells(i, 1) & Sheets("退庫").Cells(1, 1), Sheets("出庫明細").Range("I2:I600")) '退庫
-
- QA = Sheets("倉庫庫存").Cells(i, 4) + Sheets("倉庫庫存").Cells(i, 5) ' ''倉庫庫存
- QB = Sheets("倉庫庫存").Cells(i, "K") + Sheets("倉庫庫存").Cells(i, "L")
-
- Sheets("倉庫庫存").Cells(i, 5) = X '入庫合計
- Sheets("倉庫庫存").Cells(i, "M") = BC ''總出貨
- Sheets("倉庫庫存").Cells(i, "C") = DA ' 總需求
- Sheets("倉庫庫存").Cells(i, "H") = QA - QB - BA - bb - BC ''公司倉
- Sheets("倉庫庫存").Cells(i, "I") = bb ''B倉
- Sheets("倉庫庫存").Cells(i, "J") = BA ''A倉
- Sheets("倉庫庫存").Cells(i, "G") = QA - QB - BC ''總數
- Sheets("廢料倉").Cells(i, 3) = FY + FX
- Sheets("退庫").Cells(i, 3) = EY
- Next i
-
- End Sub
複製代碼 |
|
|
|
|
|
|
|
- 帖子
- 46
- 主題
- 3
- 精華
- 0
- 積分
- 73
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2018-2-12
- 最後登錄
- 2025-9-17
|
回復 2# samwang
好的 那我簡化一些再貼上來 |
|
|
|
|
|
|
|
- 帖子
- 46
- 主題
- 3
- 精華
- 0
- 積分
- 73
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2018-2-12
- 最後登錄
- 2025-9-17
|
|
|
|
|
|
|
|
- 帖子
- 46
- 主題
- 3
- 精華
- 0
- 積分
- 73
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2018-2-12
- 最後登錄
- 2025-9-17
|
回復 5# Andy2483
厲害了~感謝前輩幫我解惑
我再好好研究研究! |
|
|
|
|
|
|
|
- 帖子
- 46
- 主題
- 3
- 精華
- 0
- 積分
- 73
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2018-2-12
- 最後登錄
- 2025-9-17
|
回復 7# samwang
好厲害!
這也是一種方法,速度又更快了!
謝謝前輩! |
|
|
|
|
|
|
|
- 帖子
- 46
- 主題
- 3
- 精華
- 0
- 積分
- 73
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2018-2-12
- 最後登錄
- 2025-9-17
|
回復 7# samwang
前輩請問一下如果是要判斷兩個條件
例如:- With Sheets("入庫明細")
- Arr = .Range(.[r1], .[o65536].End(3))
- For i = 2 To UBound(Arr)
- T = Arr(i, 1): xD(T) = xD(T) + Arr(i, 4) '入庫合計
- Next
- End With
複製代碼 加入判斷倉庫別的話 |
|
|
|
|
|
|
|
- 帖子
- 46
- 主題
- 3
- 精華
- 0
- 積分
- 73
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2018-2-12
- 最後登錄
- 2025-9-17
|
本帖最後由 s3526369 於 2022-9-15 12:56 編輯
回復 11# samwang - With Sheets("入庫明細")
- Arr = .Range(.[r1], .[o65536].End(3))
- For i = 2 To UBound(Arr)
- T = Arr(i, 1): xD(T) = xD(T) + Arr(i, 4) '入庫合計
- Next
- End With
複製代碼 目前是 判斷料號 = 入庫明細料號 加總後填入到倉庫庫存的進貨合計欄位
我的意思是判斷料號後還要再判斷入庫明細裡的倉庫(入)欄位,符合是"公司倉"才可以填入
數量 , 料號 , 料號 , 倉別 , 倉別
WorksheetFunction.SumIf(Sheets("入庫明細").Range("H2:H600"), Sheets("A需求").Cells(i, 1) ,Sheets("入庫明細").Range("O2:O600"), "公司倉",Sheets("入庫明細").Range("S2:S600") ) |
|
|
|
|
|
|
|
- 帖子
- 46
- 主題
- 3
- 精華
- 0
- 積分
- 73
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2018-2-12
- 最後登錄
- 2025-9-17
|
回復 14# samwang
不好意思
原本資料是sumif 改成- With Sheets("入庫明細")
- Arr = .Range(.[r1], .[o65536].End(3))
- For i = 2 To UBound(Arr)
- T = Arr(i, 1): xD(T) = xD(T) + Arr(i, 4) '入庫合計
- Next
- End With
複製代碼 如果是換成sumifs 要判斷兩個條件成立的話 |
-
-
入庫單.png
(93.26 KB)
|
|
|
|
|
|
|
- 帖子
- 46
- 主題
- 3
- 精華
- 0
- 積分
- 73
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2018-2-12
- 最後登錄
- 2025-9-17
|
回復 13# Andy2483
謝謝前輩,這個執行速度也很快,但是內容就比較複雜需要好好好研究 |
|
|
|
|
|
|
|
- 帖子
- 46
- 主題
- 3
- 精華
- 0
- 積分
- 73
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2018-2-12
- 最後登錄
- 2025-9-17
|
|
|
|
|
|
|
|