標題:
[發問]
寫macro 代替 Sumif, countif formula
[打印本頁]
作者:
nelson9165
時間:
2019-9-5 00:42
標題:
寫macro 代替 Sumif, countif formula
如題, 太多formula會影響運算速度. 所以想用macro 取代
請看附件
謝謝:)
[attach]31222[/attach]
作者:
GBKEE
時間:
2019-9-8 10:28
回復
1#
nelson9165
試試看
Option Explicit
Sub EX()
Dim d As Object, i As Long, D_S As String, AR(), E As Range
Set d = CreateObject("scripting.dictionary") '設立物件:字典物件
With Sheets("data") '資料工作頁
i = 2
Do While .Cells(i, "A") <> ""
D_S = .Cells(i, "C") & .Cells(i, "B") & .Cells(i, "A") '字典物件的 關鍵字
'Exists 方法 如果在 Dictionary 物件中指定的關鍵字存在,傳回 True,若不存在,傳回 False。
If d.Exists(D_S) Then
AR = d(D_S) '陣列=字典物件的項目
AR(0) = AR(0) + 1 '項目 個數的加總
AR(1) = AR(1) + .Cells(i, "D") '項目 數字的加總
d(D_S) = AR
Else
d(D_S) = Array(1, .Cells(i, "D").Value) '字典物件的項目導入陣列
End If
i = i + 1
Loop
End With
With Sheets("工作表1")
.Range("B9:I16") = "" '清除資料不含Code
For Each E In .Range("A9:A16") 'Code欄的範圍
D_S = .Range("D6") & E '日期 & Code
If d.Exists(D_S & "A") Then
E.Range("D1") = d(D_S & "A")(0)
E.Range("G1") = d(D_S & "A")(1)
End If
If d.Exists(D_S & "B") Then
E.Range("E1") = d(D_S & "B")(0)
E.Range("H1") = d(D_S & "B")(1)
End If
E.Range("F1") = E.Range("D1") + E.Range("E1")
E.Range("I1") = E.Range("G1") + E.Range("H1")
Next
End With
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)