分享

跟烟花入门VBA之81:单元格对象Range(二十五)

 fzchenwl 2015-04-01

Sort 方法

 对值区域进行排序。

 语法:Sort(Key1, Order1, Key2, Type, Order2, Key3,  _

      Order3, Header, OrderCustom, MatchCase,  _

      Orientation, SortMethod, DataOption1, _

      DataOption2, DataOption3)

   Key1 可选,指定第一排序字段。
     作为区域名称(字符串)或
 Range 对象;确定要排序的值。

   Order1 可选,确定 Key1 中指定的值的排序次序,可取值如下:

     xlAscending,升序,这是默认值,忽略的情况下按升序排。

     xlDescending,降序。

   Key2 可选,第二排序字段;对数据透视表进行排序时不能使用。

   Type 可选,当对透视表进行排序时,指定对哪些元素排序;
      对一个普通范围则没有影响。

   Order2 可选 ,确定 Key2 中指定的值的排序次序。

   Key3 可选,第三排序字段;对数据透视表进行排序时不能使用。

   Order3 可选,确定 Key3 中指定的值的排序次序。

   Header 可选 XlYesNoGuess 指定第一行是否包含标题信息。

    xlNo 是默认值;如果希望由 Excel 尝试确定标题,则指定xlGuess
    通常情况下,如果有标题就用XlYes吧。

     OrderCustom 可选,指定在自定义排序次序列表中的基于1的整数偏移。

        在10中默认情况下Excel自带有11个自定义序列。

    当赋值为1时代表排序方式为普通(非自定义序列)

  MatchCase 可选,排序时是否分区大小写的排序;不能用于数据透视表。

  Orientation 可选 ,指定排序方向。

    xlSortColumns ,按列排序。

    xlSortRows  按行排序,默认值。

  SortMethod 可选,排序方法。

    xlPinYin 1 按字符的汉语拼音顺序排序。这是默认值。  

    xlStroke 2 按每个字符的笔划数排序。

  DataOption1 可选,指定 Key1 中所指定区域中的文本的排序方式;
    不应用于数据透视表排序,可取值如下:

     xlSortNormal,分别对数字和文本数据进行排序,默认值。

     xlSortTextAsNumbers,将文本作为数字型数据进行排序。

  DataOption2 可选,指定 Key2 中所指定区域中的文本的排序方式;
    不应用于数据透视表排序。

  DataOption3 可选,指定 Key3 中所指定区域中的文本的排序方式;
    不应用于数据透视表排序。


 注意:

  对于特定的工作表,每次使用本方法时,将保存对 HeaderOrder1Order2Order3
  
OrderCustom  Orientation 的设置。

  如果在下次调用本方法时不指定这些参数的值,则会使用这些保存的值。

  如果不使用这些保存的值,在每次使用 Sort 方法时请明确设置这些参数的值。

  不能转换为数字型数据的文本字符串按常规排序。


  如果使用 Sort 方法时没有定义参数,则会对所选定的要排序的区域按升序排序。

  另外,该方法兼容0397-2003中,排序只能基于3个条件,而在10可以支持64个排序条件)。
  在
10版本中,在工作表对象中有个sort属性返回一个Sort对象,专管排序。
    在10中录制操序操作的代码均是操作Sort对象。
  
                             

 示例1
   

  With Range('b5').CurrentRegion

   .Sort key1:=Range('c5'), order1:=xlDescending, Header:=xlYes

      '按金牌数排序

     .Sort key1:=Range('c5'), order1:=xlDescending, _
       key2:=Range('d5'), order2:=xlDescending, _

       key3:=Range('e5'), order3:=xlDescending, Header:=xlYes
   '在有标题行的情况下,最好明确指明Header参数

   '否则标题行参与到排序后效果可就会让你掉眼镜了。

   '金银铜按降序排序(同样的金牌,再比银,如银相同再比铜)

   '注意法国,乌克兰,荷兰的先后顺序

  End With

  效果图:

     

 示例2:
   

  在行排序时需要注意的一点就是标题列。

  在列排序中有标题行一说,但是在行排序中无标题列这个参数。

  Range('b1:p4').Sortkey1:=Range('a2'), order1:=xlDescending, _

   key1:=Range('a3'),order1:=xlDescending, _

   key1:=Range('a4'),order1:=xlDescending, _
   Orientation:=xlSortRows

  效果图:

     

 示例3

  数据还是用示例1的。

   Range('b5').CurrentRegion.Sortkey1:=Range('b5'), order1:=xlDescending, _
     SortMethod:=xlPinYin,Header:=xlYes

   '对国家/地区字段按拼音排序

   Range('b5').CurrentRegion.Sortkey1:=Range('b5'), order1:=xlDescending, _
    SortMethod:=xlStroke,Header:=xlYes

   '对国家/地区字段按笔画排序
  效果图:
     

 示例4

   

  Dim iCl As Byte

  iCl = Application.CustomListCount

  '取得当前已定义的自定义序列的数目(包括内置序列)

  Application.AddCustomList Range('f2:f8')

  '添加自定义序列,这里没有考虑当要添加的自定义序列已经存在的情况

  Range('a1').CurrentRegion.Sort _

   key1:=Range('b1'), Header:=xlYes, _

   ordercustom:=iCl + 2

  '按自定义排序,这里ordercumtom参数需要注意下,因为是基于1开始

  '(1是普通,加上系统的内置的,再加上自己添加的)

  Application.DeleteCustomList iCl + 1

     '删除添加的自定义序列

  效果图:

    

 关于其他参数的就不一一介绍了。

 另外,刚测试代码时试了同一个命名参数添加两个,系统只认第一个。
  大家可以测试下:

  Range('a1').CurrentRegion.Sort _

   key1:=Range('b1'), order1:=xlDescending, _

   order1:=xlAscending, _

   Header:=xlYes, _

   ordercustom:=iCl + 2

  Range('a1').CurrentRegion.Sort _

   key1:=Range('b1'), order1:=xlAscending, _

   order1:=xlDescending, Header:=xlYes, _

   ordercustom:=iCl + 2


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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多