Суммарное значение критерия нескольких элементов (полей) с коллекцией - PullRequest
0 голосов
/ 24 апреля 2019

Я новичок в коллекциях и словарях.

Мне удалось заполнить данные с использованием коллекций, и теперь мне нужна помощь, чтобы узнать, как мне суммировать значения, когда элементы (поля) встречаются.

'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 и т. Д., И вычисление невыносимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...