返回列表 上一主題 發帖

請問sumif 改寫成字典或是array讓執行速度變快

回復 1# s3526369


請問方便附上檔案嗎? 謝謝

TOP

回復  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

TOP

回復  samwang


  前輩請問一下如果是要判斷兩個條件
例如:加入判斷倉庫別的話
s3526369 發表於 2022-9-15 09:53


不太了解您的意思,是這樣嗎?

T = Arr(i, 1) & "|" & Arr(i, ??)

TOP

回復  samwang 目前是 判斷料號 = 入庫明細料號 加總後填入到倉庫庫存的進貨合計欄位   
我的意思是判斷料 ...
s3526369 發表於 2022-9-15 12:46


不好意思,不太了解需求,可否附上說明演練實際數據,謝謝

TOP

回復  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

TOP

回復  Andy2483

前輩~你看看這個,我套用samwang前輩方式去整理出來!
執行速度很快,但是目前遇到的問題 ...
s3526369 發表於 2022-9-16 16:45



附件看不出哪裡有公式,後學光看那些程式碼就快....,您都可以套用寫出,建議將原來有公式區可以轉成VBA,
這樣也可以提升效率,謝謝

TOP

回復  samwang

前輩你好~我倉庫庫存A.B是連結材料表的資料,我重新上傳附件!
s3526369 發表於 2022-9-17 00:14


請測試看看,謝謝

倉庫合計TEST2_0917.zip (627.58 KB)

TOP

        靜思自在 : 時時好心就是時時好日。
返回列表 上一主題