分享

ExcelVBA多关键字排序

 L罗乐 2020-02-22

本文转载自公众号:VBA168,作者:两个聪。

多关键字排序

使用Range对象的Sort方法对区域进行排序时,同时最多只能指定3个关键字,当需要按照超过3个关键字对区域进行排序时,可以通过多次执行Sort方法实现。需要注意的是,在排序时应按照各关键字的倒叙顺序。例如,如果按照A→B→C→D的关键字顺序进行排序,则应按D→C→B→A的顺序执行Sort方法。

图1 带排序数据

如图1所示数据表中,需要按'总成绩'、'基础知识'、'教育学'和'心理学'的成绩降序排列,实例代码如下。

Sub SortByKeysA() With Range('A1') .Sort Key1:='心理学', order1:=xlDescending, Header:=xlYes .Sort Key1:='教育学', order1:=xlDescending, Header:=xlYes .Sort Key1:='基础知识', order1:=xlDescending, Header:=xlYes .Sort Key1:='总成绩', order1:=xlDescending, Header:=xlYes End With End Sub

运行以上过程,结果如图2所示。

图2 数据排序结果

使用Range对象的Sort方法对区域进行超过3个关键字排序时,需要多次执行Sort方法,而通过Worksheet对象的Sort方法则可以一次完成。如下示例代码实现与上面示例代码相同的排序功能。

Sub MoreKeySort()          With ActiveSheet.Sort.SortFields         .Clear         .Add Key:=Range('G1'), SortOn:=xlSortOnValues, Order:=xlDescending         .Add Key:=Range('B1'), SortOn:=xlSortOnValues, Order:=xlDescending         .Add Key:=Range('C1'), SortOn:=xlSortOnValues, Order:=xlDescending         .Add Key:=Range('D1'), SortOn:=xlSortOnValues, Order:=xlDescending     End With     With ActiveSheet.Sort         .SetRange Range('A1').CurrentRegion         .Header = xlYes         .Apply     End With End Sub

第3行代码清除工作表所有的SortFields对象。

第4~7行分别在Sort对象中添加SortFields对象。SortFields对象的Add方法创建新的排序字段,并返回SortFields对象,其语法格式如下。

Add(Key, SortOn, Order, CustomOrder, DataOption)

该方法的各参数分别对应于Range对象Sort方法的参数。

第10行代码指定Sort对象的排序区域。

第11行代码指定排序区域包含标题。

第12行代码应用工作表排序。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多