2016-06-14 44 views
0

我有以下的伪数据创建值和密钥列表,并获得最大值

Dim count1 As Integer 
Dim count2 As Integer 
Dim count3 As Integer 
Dim count4 As Integer 
Dim count5 As Integer 

count1 = 0 
count2 = 3 
count3 = 2 
count4 = 0 
count5 = 1 

使用下面的代码我的值添加到字典

Dim key As Variant 
Dim dic As Object 
Set dic = CreateObject("Scripting.Dictionary") 

    dic.Add "Category 1", count1 
    dic.Add "Category 2", count2 
    dic.Add "Category 3", count3 
    dic.Add "Category 4", count4 
    dic.Add "Category 5", count5 

我想但现在要做的是获得属于最高计数的类别(在本例中为 类别2)。有关如何提取此值的任何想法?

+0

欢迎SO。请阅读[如何问](http://stackoverflow.com/help/how-to-ask)。简而言之,您需要显示您的代码尝试解决此问题,以及它无法获得最多帮助的位置在这个网站上。如果您还张贴了您的工作表样本的屏幕截图,那也可以帮助我们更好地帮助您。 – Moosli

+0

@Moosli,好的,请记住。更新我的问题 –

回答

1

您需要先添加密钥,然后添加项目。

见示例代码(请注意,我用的字典早期绑定,它让生活变得更轻松):

Sub DictionaryKeyTest() 
    Dim d As Scripting.Dictionary 
    Set d = New Dictionary 
    d.Add 2, "notHighest" 
    d.Add 3, "alsoNotHighest" 
    d.Add 10, "Highest!" 
    d.Add 4, "alsoAlsoNotHighest" 

    Debug.Print d(Application.Max(d.Keys)) 
End Sub 

如果你运行这段代码,立即窗口将显示:

最高!

如果你需要跑来跑去此相反,说,如果几个类别可以有相同的计数值(或其他一些场景类别是关键),有没有办法做什么你想不循环所有的值来找到最大的值。例如:

Sub DictionaryHighestItemCounter() 
    Dim d As Scripting.Dictionary 
    Set d = New Dictionary 
    d.Add "notHighest", 2 
    d.Add "alsoNotHighest", 2 
    d.Add "Highest!", 10 
    d.Add "alsoAlsoNotHighest", 4 

    Dim highestVal As Long, s As String 
    For Each i In d.Keys 
     If d(i) > highestVal Then 
      highestVal = d(i) 
      s = i 
     End If 
    Next i 

    Debug.Print s 
End Sub 

此代码也将打印

最高!

0

,你可以使用数组:

Option Explicit 

Sub GetCategory()  
    Dim catsArray As Variant, valsArray As Variant 

    catsArray = Array("Category 1", "Category 2", "Category 3", "Category 4", "Category 5") 
    valsArray = Array(0, 3, 2, 0, 1) 

    MsgBox "The winner is: " & catsArray(WorksheetFunction.Match(WorksheetFunction.Max(valsArray), valsArray, 0) - 1) 
End Sub 

,将工作,你应该一定要用变量的值,以及:

Option Explicit 

Sub GetCategory2() 
    Dim catsArray As Variant, valsArray As Variant 
    Dim count1 As Integer: count1 = 0 
    Dim count2 As Integer: count2 = 3 
    Dim count3 As Integer: count3 = 2 
    Dim count4 As Integer: count4 = 0 
    Dim count5 As Integer: count5 = 1 

    catsArray = Array("Category 1", "Category 2", "Category 3", "Category 4", "Category 5") 
    valsArray = Array(count1, count2, count3, count4, count5) 

    MsgBox "The winner is: " & catsArray(WorksheetFunction.Match(WorksheetFunction.Max(valsArray), valsArray, 0) - 1) 
End Sub