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 jEnd Sub
运行上面的代码便可以得到我们想要的结果。相对来说,由于原始数据相对单一,排序便变得比较简单。
LARGE 函数的公式语法。LARGE(array,k)
LARGE 函数语法具有下列参数:
有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来处理了。下一篇文章我们再进行讲解。