Excel 使用ArrayList对字典键进行排序
我似乎无法使用Excel 使用ArrayList对字典键进行排序,excel,vba,Excel,Vba,我似乎无法使用ArrayList对dictionary对象进行排序。代码可以工作,这意味着它返回一个来自范围(“A1:A20”)的唯一值列表。它只是没有对值进行排序。有什么想法吗 Option Explicit Public Sub Test() Dim wb As Workbook Set wb = ActiveWorkbook Dim ws As Worksheet Set ws = wb.ActiveSheet Dim rng As ListO
ArrayList
对dictionary对象进行排序。代码可以工作,这意味着它返回一个来自范围(“A1:A20”)
的唯一值列表。它只是没有对值进行排序。有什么想法吗
Option Explicit
Public Sub Test()
Dim wb As Workbook
Set wb = ActiveWorkbook
Dim ws As Worksheet
Set ws = wb.ActiveSheet
Dim rng As ListObject
Set rng = ws.ListObjects(1)
Dim arr() As Variant
arr = Application.Transpose(rng.DataBodyRange.Value)
Dim d As Scripting.Dictionary
Set d = GetUnique(arr)
Dim tempD As Scripting.Dictionary
Set tempD = New Scripting.Dictionary
Set tempD = SortDictionary(d)
Dim key As Variant
For Each key In d.Keys
Debug.Print key, d.Item(key)
Next key
End Sub
Private Function GetUnique(ByRef arr() As Variant) As Scripting.Dictionary
Dim v As Variant
Set GetUnique = New Scripting.Dictionary
On Error Resume Next
For Each v In arr
GetUnique.Add v, v
Next v
End Function
Private Function SortDictionary(dicObject As Scripting.Dictionary, Optional xlSortOrder As xlSortOrder = xlAscending) As Scripting.Dictionary
Dim obj As Object
Set obj = CreateObject("System.Collections.ArrayList")
Dim v As Variant
With obj
For Each v In dicObject
.Add v
Next v
.Sort
End With
Dim tempDic As Scripting.Dictionary
Set tempDic = New Scripting.Dictionary
Dim k As Variant
For Each k In obj
tempDic.Add k, dicObject(k)
Next k
Set SortDictionary = tempDic
End Function
这是因为,当您将已排序字典指定给
tempD
时,您引用的是原始的未排序字典。试试看
For Each key In tempD.Keys
Debug.Print key, tempD.Item(key)
Next key
希望这有帮助 您正在打印未排序字典
d
的键,而不是已排序字典tempD
@RonRosenfeld的键,我现在看到了。谢谢你,罗恩!不知道我怎么会错过这个。非常感谢。