返回列表 上一主題 發帖

[發問] 巨集執行愈來愈慢?

回復 1# adam2010

1.錄製碼本來執行就慢,尤其含有太多的 Select,須整理為更有效的方式,
  不同需求的程式,應分別以 sub 建立單獨程序,要引用時 call 一下即可,
  像 Sheets("WIP") 部份,實可獨立成單一程序!
  但因不了解處理需求流程,且部份語法在office 2000無法使用,所以無法幫忙整理!
2.僅針對〔交期〕工作表提供個人不正規的寫法,可單獨測試其執行速度,
  另執行結果與原檔程式的結果有部份不相同(L欄標示紅字者),請檢查一下!
3.另提供相同資料配底色程式,視覺上較易分辨各編號的起迄區塊!
  1. Sub 交期()
  2. Dim R&, C&, Arr, Brr, DateRow, xD, i&, j&, SS&, S&, T$, M
  3. R = [出貨日!A65535].End(xlUp).Row - 1
  4. C = [出貨日!IV1].End(xlToLeft).Column - 1
  5. Arr = [出貨日!A1].Resize(R, C)
  6. ReDim Brr(1 To C - 1)
  7. Set xD = CreateObject("Scripting.Dictionary")
  8. For j = 2 To C: Brr(C - j + 1) = Arr(1, j): Next j: DateRow = Brr  '日期由大而小倒轉
  9.  
  10. For i = 2 To R
  11.  For j = 2 To C  '數量累計〔由後而前〕排入陣列
  12.    S = Val(Arr(i, j)): SS = SS + S
  13.    If S = 0 Then Brr(C - j + 1) = "" Else Brr(C - j + 1) = SS
  14.  Next j
  15.  If SS > 0 Then xD(Arr(i, 1)) = Brr: SS = 0  '將累計數列納入字典檔
  16. 101: Next i
  17. '======================================================
  18. R = [交期!A65535].End(xlUp).Row
  19. Arr = [交期!A1].Resize(R, 4)
  20. ReDim Brr(1 To R, 0): Brr(1, 0) = "交期"
  21. For i = 2 To R
  22.   T = Arr(i, 1): S = Arr(i, 4)
  23.   If T <> Arr(i - 1, 1) Then SS = S Else SS = SS + S  'A欄相同,累計,反之,取當前數量
  24.   M = Application.Match(SS, xD(T), -1)   '利用MATCH〔反序〕找相對位置
  25.   If S = 0 Or IsError(M) Then Brr(i, 0) = "NA" Else Brr(i, 0) = DateRow(M)  '無符合填NA,否則填日期
  26. Next i
  27. [交期!E1].Resize(R) = Brr
  28. End Sub
複製代碼
附件下載:
ESOD_XT_AA_v001.rar (425.39 KB)
 

TOP

        靜思自在 : 願要大、志要堅、氣要柔、心要細。
返回列表 上一主題