請問sumif 改寫成字典或是array讓執行速度變快
- 帖子
- 976
- 主題
- 7
- 精華
- 0
- 積分
- 1018
- 點名
- 0
- 作業系統
- Win10
- 軟體版本
- Office 2016
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-4-19
- 最後登錄
- 2026-5-26
|
回復 1# s3526369
請問方便附上檔案嗎? 謝謝 |
|
|
|
|
|
|
|
- 帖子
- 976
- 主題
- 7
- 精華
- 0
- 積分
- 1018
- 點名
- 0
- 作業系統
- Win10
- 軟體版本
- Office 2016
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-4-19
- 最後登錄
- 2026-5-26
|
回復 samwang
檔案在這 再麻煩你看看
s3526369 發表於 2022-9-14 08:51 
請測試看看,謝謝
Sub test()
Dim Arr, xD, xD1, xD2, xD3, xD4, T$, i&, QA, QB
Set xD = CreateObject("Scripting.Dictionary") '入庫合計
Set xD1 = CreateObject("Scripting.Dictionary") '公司總需求
Set xD2 = CreateObject("Scripting.Dictionary") 'A倉
Set xD3 = CreateObject("Scripting.Dictionary") 'B倉
Set xD4 = CreateObject("Scripting.Dictionary") '總出貨
TM = Timer
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
With Sheets("全機種BOM")
Arr = .Range(.[z1], .[p65536].End(3))
For i = 2 To UBound(Arr)
T = Arr(i, 1): xD1(T) = xD1(T) + Arr(i, 11) '公司總需求
Next
End With
With Sheets("A需求")
Arr = .Range(.[h1], .[a65536].End(3))
For i = 4 To UBound(Arr)
T = Arr(i, 1): xD2(T) = xD2(T) + Arr(i, 8) 'A倉
Next
End With
With Sheets("B需求")
Arr = .Range(.[h1], .[a65536].End(3))
For i = 4 To UBound(Arr)
T = Arr(i, 1): xD3(T) = xD3(T) + Arr(i, 8) 'B倉
Next
End With
With Sheets("指圖明細")
Arr = .Range(.[L1], .[f65536].End(3))
For i = 4 To UBound(Arr)
T = Arr(i, 1): xD4(T) = xD4(T) + Arr(i, 7) '總出貨
Next
End With
With Sheets("倉庫庫存")
Arr = .Range(.[m3], .[a65536].End(3))
For i = 2 To UBound(Arr)
T = Arr(i, 1)
QA = Arr(i, 4) + Arr(i, 5) ' ''倉庫庫存
QB = Arr(i, 11) + Arr(i, 12)
Arr(i, 5) = xD(T) '入庫合計
Arr(i, 13) = xD4(T) '總出貨
Arr(i, 3) = xD1(T) '總需求
Arr(i, 8) = QA - QB - xD2(T) - xD3(T) - xD4(T) '公司倉
Arr(i, 9) = xD3(T) 'B倉
Arr(i, 10) = xD2(T) 'A倉
Arr(i, 7) = QA - QB - xD4(T) '總數
Next
.[a3].Resize(UBound(Arr), 13) = Arr
End With
MsgBox "共耗時:" & Timer - TM & " 秒"
End Sub |
|
|
|
|
|
|
|
- 帖子
- 976
- 主題
- 7
- 精華
- 0
- 積分
- 1018
- 點名
- 0
- 作業系統
- Win10
- 軟體版本
- Office 2016
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-4-19
- 最後登錄
- 2026-5-26
|
回復 samwang
前輩請問一下如果是要判斷兩個條件
例如:加入判斷倉庫別的話
s3526369 發表於 2022-9-15 09:53 
不太了解您的意思,是這樣嗎?
T = Arr(i, 1) & "|" & Arr(i, ??) |
|
|
|
|
|
|
|
- 帖子
- 976
- 主題
- 7
- 精華
- 0
- 積分
- 1018
- 點名
- 0
- 作業系統
- Win10
- 軟體版本
- Office 2016
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-4-19
- 最後登錄
- 2026-5-26
|
回復 samwang 目前是 判斷料號 = 入庫明細料號 加總後填入到倉庫庫存的進貨合計欄位
我的意思是判斷料 ...
s3526369 發表於 2022-9-15 12:46 
不好意思,不太了解需求,可否附上說明演練實際數據,謝謝 |
|
|
|
|
|
|
|
- 帖子
- 976
- 主題
- 7
- 精華
- 0
- 積分
- 1018
- 點名
- 0
- 作業系統
- Win10
- 軟體版本
- Office 2016
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-4-19
- 最後登錄
- 2026-5-26
|
回復 samwang
不好意思
原本資料是sumif 改成如果是換成sumifs 要判斷兩個條件成立的話
s3526369 發表於 2022-9-15 14:43 
是這樣嗎? 請測試看看,謝謝
With Sheets("入庫明細")
Arr = .Range(.[S1], .[o65536].End(3))
For i = 2 To UBound(Arr)
If Arr(i, 5) = "公司倉" Then '是公司倉-->貨物編號累加R欄的Qty
T = Arr(i, 1): xD(T) = xD(T) + Arr(i, 4) '入庫合計
End If
Next
End With |
|
|
|
|
|
|
|
- 帖子
- 976
- 主題
- 7
- 精華
- 0
- 積分
- 1018
- 點名
- 0
- 作業系統
- Win10
- 軟體版本
- Office 2016
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-4-19
- 最後登錄
- 2026-5-26
|
回復 Andy2483
前輩~你看看這個,我套用samwang前輩方式去整理出來!
執行速度很快,但是目前遇到的問題 ...
s3526369 發表於 2022-9-16 16:45 
附件看不出哪裡有公式,後學光看那些程式碼就快....,您都可以套用寫出,建議將原來有公式區可以轉成VBA,
這樣也可以提升效率,謝謝 |
|
|
|
|
|
|
|
- 帖子
- 976
- 主題
- 7
- 精華
- 0
- 積分
- 1018
- 點名
- 0
- 作業系統
- Win10
- 軟體版本
- Office 2016
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-4-19
- 最後登錄
- 2026-5-26
|
回復 samwang
前輩你好~我倉庫庫存A.B是連結材料表的資料,我重新上傳附件!
s3526369 發表於 2022-9-17 00:14 
請測試看看,謝謝 |
|
|
|
|
|
|
|