Сортировка Dictionary на основе вложенного Dictionary Item в VBA

Есть сэмпл данных в Excel (таблица):

enter image description here

Пытаюсь получить ТОП-3 элемента списка на основании "Salary" и ТОП-3 на основании "Revenue" программно в VBA.


В Visual Basic (VBA) создал словарь с параметром Name в качестве Key и вложенного Dictionary в качестве Item.

Вложенный Dictionary имеет параметры "Salary", "Revenue" and "Position" как Key. И соответствующие значения из таблицы как Items.

Создал Dictionary:

Dim MainDict As New Scripting.Dictionary
Dim NestedDict As Scripting.Dictionary
    
Dim rngRange As Range
Set rngRange = wsMainWorkSheet.Range("B2:E8")

Dim rowCounter As Long
  
For rowCounter = 1 To rngRange.Rows.Count
    Set NestedDict = New Dictionary
    NestedDict.Add key:="Salary", Item:=rngRange(rowCounter, 2)
    NestedDict.Add key:="Revenue", Item:=rngRange(rowCounter, 3)
    NestedDict.Add key:="Position", Item:=rngRange(rowCounter, 4)
    
    Dim mainKey As String
    mainKey = CStr(rngRange(rowCounter, 1))
    If MainDict.Exists(mainKey) = False Then
        MainDict.Add key:=mainKey, Item:=NestedDict
    Else:
        MainDict.Item(mainKey)("Salary") = MainDict.Item(mainKey)("Salary") + rngRange(rowCounter, 2)
        MainDict.Item(mainKey)("Revenue") = MainDict.Item(mainKey)("Salary") + rngRange(rowCounter, 3)
    End If
Next rowCounter

Для печати элементов словаря MainDict использую такой код:

Sub PrintDictionary(dict As Dictionary)
Dim key As Variant, subKey As Variant

For Each key In dict.Keys
    Debug.Print vbNewLine; "Name: " & key
    For Each subKey In dict(key).Keys
        Debug.Print subKey & ": " & dict(key)(subKey)
    Next subKey
Next key
End Sub

Результат:

Name: Name1 Salary: 400 Revenue: 5000 Position: Manager

Name: Name2 Salary: 500 Revenue: 25000 Position: Associate

(первые две строки)


Сложность в проведении сортировки словаря на основе вложенного словаря:

  • Получение ТОП-3 элементов списка (MainDict) на основании наибольшего показателя "Salary" во вложенном словаре NestedDict .

  • Получение ТОП-3 элементов списка (MainDict) на основании наибольшего показателя "Revenue" во вложенном словаре NestedDict .

Может ли кто подсказать как это реализовать без ручной предварительной сортировки самих данных в таблице Excel?

Book1.xlsm (сэмпл данных) доступен в DropBox: Book1.xlsm


Ответы (0 шт):