前言:
此刻兄弟们对“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排序算法