在 VBA 中的字典值中查找最大值/最小值
Posted
技术标签:
【中文标题】在 VBA 中的字典值中查找最大值/最小值【英文标题】:find max/min value in dictionary values in VBA 【发布时间】:2019-01-25 18:16:32 【问题描述】:我正在使用 VBA 将键和与键关联的值存储到字典中。
Sub Dict_Example()
Set dict = CreateObject("Scripting.Dictionary")
For i = 1 to 5
dict.Add i, some number
Next i
我想在dict
中找到最大值及其关联键。
例如,如果 dict = 1: 5, 2: 10, 3: 6, 4: 11, 5: 3 其中 1,2,3,4,5 是键,5,10,6,11 , 3 是值,那么它应该返回 4:11。
如何在 VBA 中做到这一点?
【问题讨论】:
见:excelmacromastery.com/vba-dictionary/#Sorting_by_values 【参考方案1】:我会从dict.items
生成一个数组并在上面使用 Max/Min 函数。然后循环键并与之比较项目。
Option Explicit
Public Sub Dict_Example()
Dim dict As Object, max As Long, min As Long, arr(), key As Variant, i As Long
Set dict = CreateObject("Scripting.Dictionary")
For i = 1 To 5
dict.Add i, i * Application.WorksheetFunction.RandBetween(0, 100)
Next i
max = Application.max(dict.items)
min = Application.min(dict.items)
For Each key In dict
Debug.Print key, dict(key)
If dict(key) = max Then Debug.Print "max= " & dict(key) & vbTab & "key= " & key
Next
Stop
End Sub
【讨论】:
+1 不知道你可以这样使用.min
和.max
,我会把它藏在脑子里以备将来使用。跨度>
【参考方案2】:
您可以通过使用几个数组来临时存储您的高值和低值以及关联的键,因为您像这样遍历字典:
Sub test()
Dim dict As New Dictionary
Dim low(1 To 2)
Dim high(1 To 2)
Dim i As Long
Dim key
For i = 1 To 5
dict.Add i, 'some number
Next i
low(1) = dict.Keys(0)
low(2) = dict(dict.Keys(0))
high(1) = dict.Keys(0)
high(2) = dict(dict.Keys(0))
For i = 0 To dict.Count - 1
If dict(dict.Keys(i)) < low(2) Then
low(1) = dict.Keys(i)
low(2) = dict(dict.Keys(i))
ElseIf dict(dict.Keys(i)) > high(2) Then
high(1) = dict.Keys(i)
high(2) = dict(dict.Keys(i))
End If
Next i
Debug.Print low(1) & ":" & low(2) & vbCrLf & high(1) & ":" & high(2)
End Sub
但是像这样的排序只对数值有效。 @Ryan Wildry 的评论是对字典进行一般排序的方法,然后您将分别使用 dict(dict.Keys(0))
和 dict(dict.Keys(dict.Count - 1))
获取您的值,其中 dict
引用您的排序字典。
编辑:
您需要将add a library reference 发送至Microsoft Scripting Runtime
才能正常工作。
【讨论】:
以上是关于在 VBA 中的字典值中查找最大值/最小值的主要内容,如果未能解决你的问题,请参考以下文章
如何从从excel文件派生的大量字典中的值列表中查找最小值和最大值
用于在多张纸上循环的范围内查找最大值和最小值的 VBA 代码
3.python小技巧分享-使用min和max函数去找字典中的最大值和最小值