排序是计算机里经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列。或者说排序就是将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程。
在工作中我们经常会用到排序,对于高版本的EXCEL来说,可以实现多重的排序功能,那么是否可利用VBA实现多重排序功能呢?今天我们来给大家讲解这个方法。
先看下面的代码:
Range("B2").Select '第一次排序,按基准C1列实现排序
Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin
Range("B2").Select '第二次排序,按基准D1,A1,B1 来实现
Selection.Sort Key1:=Range("D1"), Order1:=xlAscending, Key2:=Range("A1") _
, Order2:=xlAscending, Key3:=Range("B1"), Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin
代码的讲解:
1 上面代码实现了四个基准的排序,就是D1、A1、B1、C1 达到了多重排序的目的。首先把光标置于在排序范围内,先进行C1基准的排序,这是排序的最后的一个基准。
代码运行完成后,目标区域内实现了C1基准的排序;然后我们再按照D1、A1、B1的三个基准来进行排序。所以上面的代码中Key1、Key2、Key3指的是关键的字段。
2 Order1也可以省略,默认升序用。取值DESCending 表示按倒序排序,即从大到小排序。取值ASCending表示按正序排序,即从小到大排序。
3 Header,其值为xlGuess、xlYes或xlNo,表示指定第一行是否包含标题,其中 xlGuess 表示由 Microsoft Excel 确定是否有标题,如果有,确定标题位于何处,其它两个分别表示有标题和无标题。排序时最好明确标题是否存在,以免发生错误,造成数据丢失。
4 OrderCustom。Variant 类型,可选。本参数是从 1 开始的整数,指定了在自定义排序顺序列表中的索引号。如果省略 OrderCustom参数,则使用常规排序。
5 MatchCase。Variant 类型,可选。如果为 True,则进行区分大小写的排序;如果为 False,则排序时不区分大小写。对数据透视表进行排序时,不能使用本参数。
6 Orientation。 XlSortOrientation 类型,可选。排序方向。7 SortMethod。 XlSortMethod 类型,可选。排序类型。对于所选择或安装的不同语言支持(例如:美国英语),以上某些常量可能不可用。xlPinYin 默认值。按字符的汉语拼音顺序排序。
相信到这里大家看上面的解释已经很迷糊了,也是记不住啊,不要紧,真的不用记,只要记住代码,知道怎么用就行了,下面看代码的截图:
上述代码已经实测,可以整体利用。读者可以拷贝原代码到你的程序中,可以略加修改直接利用。要理解思路,不要去盲目的记那些代码了。
这里还要注意一点,由于我用的主要是03版本的EXCEL,以上的代码在03版本之下是可以用的,如果读者发现在高版本不能用的情况,可以告诉我,EXCEL在高版本中一些原理已经有所改变,排序不是作为一种方法而是作为一种属性了。我还没有实测过。如果作为一种属性,在原理上会更加方便了,那么多重排序不再称之为问题了。
今日内容回向:
1 利用VBA如何实现多重排序功能?其思路是如何建立的。
2 在写代码时,排序的第一、第二、第三、第四关键字写的先后顺序如何分配?
分享成果,随喜正能量
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved