Я новичок в коллекциях и словарях.
Мне удалось заполнить данные с использованием коллекций, и теперь мне нужна помощь, чтобы узнать, как мне суммировать значения, когда элементы (поля) встречаются.
'SAPBWData Class Module
Public ProfitCenter As String
Public PLCode As String
Public GL As String
Public Year3Total As Double
'Module1
Public DataCollection As New Collection
Sub PopulateData()
Dim sapbw As SAPBWData
Dim r As Range
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets("Sheet1")
For Each r In sh.Range("A2:A6")
Set sapbw = New SAPBWData
sapbw.ProfitCenter = CStr(r.Value)
sapbw.PLCode = r.Offset(0, 1).Value
sapbw.GL = r.Offset(0, 2).Value
sapbw.Year3Total = r.Offset(0, 3).Value
DataCollection.Add sapbw
Set sapbw = Nothing
Next r
End Sub
Function vbaSUMIFS(ProfitCenter_Lookup As Range, PLCode_Lookup As Range, Optional GL_Lookup As Range) As Variant
Dim myKey As Variant
If GL_Lookup.Value <> "" Then
myKey = ProfitCenter_Lookup.Value & ";" & PLCode_Lookup.Value & ";" & GL_Lookup.Value
Else
myKey = ProfitCenter_Lookup.Value & ";" & PLCode_Lookup.Value
End If
'Need to know how to SUM the values based on the items that user select.
End Function
Что мне нужно здесь, так это то, что, если пользователь выбирает 2 элемента (Profit Center и PLCode), я хочу, чтобы коллекция суммировалась на основе этих элементов. Однако, если был выбран 3-й элемент (GL), я бы хотел суммировать на основе этих 3-х элементов.
По сути, это похоже на использование функции SUMIFS. Но я не могу использовать его, потому что расчет очень и очень медленный. Таким образом придется приложить к VBA Collection / Dictionary.
Примечание: я пытался использовать GETPIVOTDATA, SUMPRODUCT и т. Д., И вычисление невыносимо.