生活 2022-07-01 13:04 作者:化工【百科收集】评论:0    浏览:279    

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 函数语法具有下列参数:

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来处理了。下一篇文章我们再进行讲解。

 
标签: 字典
0相关评论
打赏