vba字典对应的行号(VBA中的字典之三字典如何排序)
字典只是一个容器,只具有最基本的一些功能:增,删,改,查。要排序其中内容,常见的两种方式:1.直接导入到单元格,用excel自带的排序功能。2.转成数组,通过算法对数组排序。
本文我们说说第二种排序方法。
如下图,这是我们需要排序的数据,和想要排序的结果:
排序的数据和想要的结果
由于数据中没有涉及到去重或求和的内容,我们仅仅只要把总成绩赋值给Key,然后把姓名赋值给Item就可以了。然后,通过函数Large来进行求值。
下面的代码是对字典中的Keys进行排序来完成的。
Sub dsort()
Dim d, arr, brr
Dim i, j
Set d = CreateObject("scripting.dictionary")
arr = Range("a2:b6")
For i = 1 To UBound(arr)
d(arr(i, 2)) = arr(i, 1)
Next i
brr = d.keys '把keys转换成数组
For j = 1 To d.Count
Range("e" & j 2) = Application.Large(brr, j)
Range("d" & j 2) = d(Application.Large(brr, j))
Next j
End Sub
运行上面的代码便可以得到我们想要的结果。相对来说,由于原始数据相对单一,排序便变得比较简单。
LARGE 函数的公式语法。LARGE(array,k)LARGE 函数语法具有下列参数:
- Array 必需。 需要确定第 k 个最大值的数组或数据区域。
- K 必需。 返回值在数组或数据单元格区域中的位置(从大到小排)。
有Large函数,就有Small函数,用法都是一样的。
由于他们两个函数都是工作表函数,在VBA引用中,必须要这样写才行。
Application.WorksheetFunction.Large(tmparray, 10)
当然也可以简化如下:
Application.Large(tmparray, 10)
那么,如果要对Items进行排序要如何操作?
如下表,我们如何对总成绩来排序呢?首先,我们要对各科成绩进行求和,然后再进行排序。
姓名 |
科目 |
成绩 |
张三 |
语文 |
90 |
张三 |
数学 |
96 |
张三 |
英语 |
92 |
李四 |
语文 |
93 |
李四 |
数学 |
94 |
李四 |
英语 |
100 |
李四 |
科学 |
99 |
王五 |
语文 |
96 |
王五 |
数学 |
97 |
王五 |
英语 |
100 |
孙七 |
语文 |
99 |
孙七 |
数学 |
89 |
孙七 |
英语 |
90 |
孙七 |
科学 |
95 |
因此肯定就不能如前面例子中,简单的把成绩当成Key来处理了。下一篇文章我们再进行讲解。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com