龙空技术网

VBA中的字典之三,字典如何排序

Excel工作应用集 394

前言:

此刻兄弟们对“vba排序算法”大约比较看重,姐妹们都想要知道一些“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来处理了。下一篇文章我们再进行讲解。

标签: #vba排序算法