看看下面的Excel界面截图,“排序”和“筛选”往往在一起,这大概是很多数据需要先排序后筛选吧! 在Excel 2007中新增了Sort对象,在录制宏时Excel会自动用到这个对象,但我们今天不会讲解这个对象,待以后再详解。今天主要讲解Range对象的Sort方法,对于3个以内的字段排序很方便。其语法如下: Range对象.Sort(Key1,Order1 As XlSortOrder, _ Key2,Type,Order2As XlSortOrder, _ Key3,Order3As XlSortOrder, _ HeaderAs XlYesNoGuess, _ OrderCustom,MatchCase,_ OrientationAs XlSortOrientation, _ SortMethodAs XlSortMethod, _ DataOption1As XlSortDataOption, _ DataOption2As XlSortDataOption, _ DataOption3As XlSortDataOption) 说明:
下面以下图所示的工作表来演示,以理解Sort方法及其参数。主要是介绍前面几个参数,其它的参数将会在以后的文章中涉及时再进行相应讲解。 首先以“性别”作为排序字段,升序排列,并且第一行作为标题信息,代码如下: 运行代码后的结果如下图: 接下来,再添加排序字段:以“性别”作为第1排序字段升序排列,以“总分”作为第2排序字段降序排列。代码如下: Excel将会以“性别”作为主要关键字升序排列,以“总分”作为次要关键字降序排列,即主关键字排序相同的,再以次关键字排序。结果如下图所示: 示例1:查找满足某项条件的所有数据并按顺序排列 仍以上面的工作表为例,我们需要所有男同学的成绩并以总分从高到低的顺序排列。将排序与自动筛选结合,可达到我们的目的。 代码如下: 运行代码后的效果如下图: 示例2:查找满足某项条件的不重复数据 如本文开头所示的工作表,要求获取男女同学中总分最高的同学数据记录。将排序与高级筛选相结合,可以达到我们的目的。 代码中的: rng.Columns(3) 表示单元格区域rng中的第3列,即“性别”字段列。 运行代码后的效果如下图: 示例3:双击列标题自动排序 在本文的示例工作表中,双击列标题,会升序排列该标题下的内容,再次双击该列标题,降序排列。代码如下: 说明:
示例4:根据活动单元格排序 在上文所示的工作表中,当单元格在A1:G10区域内移动时,将根据活动单元格所处的位置对其所在列按降序排序。代码如下: 说明:
示例5:根据颜色排序 这是Excel 2013 VBA帮助文档中Sort方法的示例,按单元格的背景色进行排序。示例代码如下: 说明:
示例6:排序有部分相同数据的行 如下图所示,课程的组合有3种,分别是“语文、数学、英语”,“数学、体育、历史”,“体育、化学、生物”,但上课的时间不同,要求将相同组合的课程排在一起。 代码如下: 说明:
示例7:自定义排序 如下图所示,我们想按单元格区域I1:I5中的顺序对单元格区域A1:G10进行排序。也就是说,无论数据如何变化,在单元格区域I1:I5中的5名同学都是按照这样的顺序排列。 代码如下: 说明:
Application对象.AddCustomList(ListArray,ByRow) 添加自定义列表,用于自定义自动填充或自定义排序。其中,参数ListArray必需,指定自定义排序数据,可以是字符串数组或者Range对象。参数ByRow可选,仅用于当参数ListArray是Range对象时;设置为True时从单元格区域中的行创建自定义列表,设置为False时从单元格区域的列创建自定义列表;如果忽略该参数且单元格区域中的列比行多,那么将从单元格区域行创建自定义列表。 注意,如果试图添加的列表已存在,那么该方法不会执行任何操作,会报出错消息。
Application对象.GetCustomListNum(ListArray) 返回字符串数组的自定义列表编号,可以用于匹配内置列表和自定义列表。其中,参数ListArray必需,指定字符串数组。 注意,如果没有相应的列表,那么该方法将导致错误。
Application对象.DeleteCustomList(ListNum) 删除自定义列表。其中,参数ListNum必需,指定自定义列表编号。编号必须大于或等于5,因为Excel有4个内置的不可删除的自定义列表。 注意,如果列表编号小于5或者没有相匹配的自定义列表,那么该方法将导致错误。(这是Excel 2013帮助文档中的说明,实际上Excel 2007中就有11个内置的不可删除的列表。) 运行代码后的结果如下图: |
|