5.4.3-单元格区域排序

对某一个区域按照某列进行排序,是一个比较常见的需求。示例:已知成绩,按照语文成绩进行排序


../_images/5-14.png

图5-14 考试成绩


遇到排序问题,我一般的做法是先录制宏看看,因为代码行数太多,记不住,哈哈。然后在此基础上修改即可,接下来介绍一下具体操作:

  • 1)第1步:点击Excel界面左下角录制宏按钮

  • 2)第2步:在弹出的窗口确认开始录制宏,其中的宏名就是后续在VBE界面中看到的Sub名称,本文中为宏1

  • 3)第3步:接下来对Excel的所有操作都有在后台生成一段对应的VBA代码。先选中拟排序区域,开始菜单下-排序和筛选-自定义排序。在弹出的窗口中,设置主要关键字为语文,次序为降序。

  • 4)第4步:关闭录制宏


../_images/5-15-1.png

1.点击左下角录制宏按钮

../_images/5-15-2.png

2.弹窗确认-开始录制宏

../_images/5-15-3.png

3.实际操作部分

../_images/5-15-4.png

4.点击左下角按钮,关闭录制宏

图5-15 录制宏


排序后的结果如图5-16所示,可以发现是按照语文成绩从高到低进行排序


../_images/5-16.png

图5-16 按语文成绩排序


对应的代码如下:

1   Sub 宏1()
2   '
3   ' 宏1 宏
4   '
5
6   '
7       Range("A1:C6").Select
8       ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
9       ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B6"), _
10          SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
11      With ActiveWorkbook.Worksheets("Sheet1").Sort
12          .SetRange Range("A1:C6")
13          .Header = xlYes
14          .MatchCase = False
15          .Orientation = xlTopToBottom
16          .SortMethod = xlPinYin
17          .Apply
18      End With
19  End Sub

关键代码解读:

1)第7行Range("A1:C6").Select。选中A1:C6区域

2)第8行ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear。清空Sheet1工作表的排序区域

3)第9-10行_(空格下划线)表示下一行为本行的续行,当代码长度过长时可以使用这种方法进行分行。本段代码含义为:新增排序区域的Key为B2:B6区域,且按照降序排列

4)第11-18行:该段代码实现以下关键功能

  • 4.1)第12行:设置排序区域为A1:C6

  • 4.2)第13行:排序区域包括标题,即A1:C1,这一行无需变化

  • 4.3)第14行:不区分大小写

  • 4.4)第15行:排序的方向是:自上向下

  • 4.5)第16行:排序的方法是:xlPinYin,这是微软自带的一个方法,简单理解为按照拼音排序或者首字母排序,这个没有深入研究过,欢迎指正