返回列表 上一主題 發帖

[發問] 如何提高多條件加總效率 SUMIFS vs SUMPRODUCT vs VBA

回復 39# ML089

有bug, 改爲
  1. Sub ss_test()
  2.     alltype = Array("A類", "B類", "C類", "D類", "E類", "F類", "G類", "H類", "I類", "J類")
  3.     aj = "D類"
  4.     Debug.Print UBound(Split(Split(“ ” & Join(alltype, "|"), aj)(0), "|"))
  5.    
  6.     Stop
  7. End Sub
複製代碼
ss

TOP

回復 39# ML089

好像還是 loop 快
  1. Sub sonny3_v3() 'VBA split+join
  2.     t1 = Timer
  3.     Dim RowsCnt, m, SubTotalAr() As Double
  4.     Dim DataArea As Variant
  5.     Dim i%, j%
  6.     AllType = " A類|B類|C類|D類|E類|F類|G類|H類|I類|J類"
  7.     ReDim SubTotalAr(0 To 9, 0 To 11)
  8.     Application.ScreenUpdating = False
  9.     With Sheets("原始資料")
  10.         RowsCnt = .Range("A1").CurrentRegion.Rows.Count
  11.         DataArea = .Range("A2").Resize(RowsCnt - 1, 3)
  12.         For m = 1 To UBound(DataArea)
  13.             i = UBound(Split(Split(AllType, DataArea(m, 1))(0), "|"))
  14.             j = -1
  15.             Do
  16.                 j = j + 1
  17.             Loop Until Month(DataArea(m, 2)) = (j + 1)
  18.             SubTotalAr(i, j) = SubTotalAr(i, j) + DataArea(m, 3)
  19.         Next m
  20.     End With
  21.    
  22.     With Sheets("總表")
  23.         .Range("B4").Resize(9 + 1, 12) = SubTotalAr
  24.         .Range("B14:R14").FormulaR1C1 = "=SUM(R[-10]C:R[-1]C)"
  25.         .Range("N4:N13").FormulaR1C1 = "=SUM(RC[-12]:RC[-1])"
  26.         .Range("O4:R13").FormulaR1C1 = "=SUM(RC[-13]:RC[-11])"
  27.     End With
  28.     Application.ScreenUpdating = True
  29.     t2 = Timer
  30.     MsgBox "耗時" & t2 - t1
  31. End Sub
複製代碼
ss

TOP

本帖最後由 sunnyso 於 2013-7-1 09:56 編輯

回復 42# ML089

完全同意
另加

VBA用陣列,減少讀寫worksheet次數

Worksheet 減少用陣列公式 (ctrl+shift+Enter)
ss

TOP

本帖最後由 sunnyso 於 2013-7-1 10:24 編輯
回復  ML089

完全同意
另加

VBA用陣列,減少讀寫worksheet次數

Worksheet 減少用陣列公式 (ctrl+shift+Enter)

sunnyso 發表於 2013-7-1 09:53


不要歧視輔助欄,因爲陣列公式比輔助欄慢

陣列公式適合小型計算,(和學習練功)
ss

TOP

回復 47# ML089

感謝ML089,
ss

TOP

        靜思自在 : 發脾氣是短暫的發瘋。
返回列表 上一主題