Excel VBA范例大全
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第4部分 排序

当工作表中存有大量数据时,为了便于观察,往往需要对数据按照一定的标准进行排序,包括汉字笔画顺序、汉字拼音顺序、数值大小顺序、单元格字体颜色顺序及单元格背景色顺序等。

按颜色和图标排序是Excel 2007新增功能,若保存为Excel 2003及以前版本的兼容格式,将无法正常再对其顺序做相应修改。

本部分主要知识点:

● 对数字和文本排序

● 按颜色排序

● 多条件排序

第16章 对数字和文本排序

对数字排序一般按其值的大小以升序或者降序排列;对文本排序则可以笔画和拼音顺序进行排序。本章通过5个实例对数字和文本排序的技巧进行讲解。

● 实例118对选区数字以升序排序

● 实例119对选区文本以字母顺序升序排序

● 实例120对选区文本以笔画顺序降序排序

● 实例121对选区数据按拼音排序并区分大小写

● 实例122对选区数据按笔画排序并区分大小写

实例118 对选区数字以升序排序

【技巧说明】 对选区数字以升序排序。

【案例介绍】 将选区数字按从小到大的顺序重新排序,但标题不参与排序。初始数据如图4.1所示。

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub对选区数值以升序排序且有标题()
  With ActiveWorkbook.ActiveSheet.Sort
      .SortFields.Clear                       '清除原排序信息
      .SortFields.Add Key:=ActiveCell, SortOn:=xlSortOnValues,
              Order:=xlAscending, DataOption:=xlSortNormal
      .SetRange Application.Intersect(Selection, Selection.Offset(1, 0))'区域
      .Apply
    End With
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 选中A1∶A11单元格,用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,选区数据立即按升序排序,而首行标题不参与排序,结果如图4.2所示。

图4.1 待排序的原始数据

图4.2 已将数字按升序排列

提示

本实例参见光盘样本:..\第4部分\实例118.xlsm。

【相关知识说明】

(1)Sort:对值区域进行排序。语法如下(各参数含义见表4.1):

range.Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header,
OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2,
DataOption3)

表4.1 Sort参数列表

(2)Sort.SetRange:设置排序对象的区域。这个参数重别重要,调整区域可以决定排序区域中的首行是否参与排序。本例以Intersect(Selection, Selection.Offset(1, 0))方法排除选区的首行,使之成为标题不参与排序;若要参与排序则直接改为Selection即可。

实例119 对选区文本以字母顺序升序排序

【技巧说明】 对选区文本以字母顺序升序排序。

【案例介绍】 将选区字母按字母顺序升序重新排序,但标题不参与排序。初始数据如图4.3所示。

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub对选区文本以字母顺序升序排序且有标题()
  With ActiveWorkbook.ActiveSheet.Sort
    .SortFields.Clear                       '清除原排序信息
    'Order:=xlAscending表示升序,Order:=xlDescending表示降序
    .SortFields.Add Key:=ActiveCell, SortOn:=xlSortOnValues,
            Order:=xlAscending, DataOption:=xlSortNormal
    .SetRange Application.Intersect(Selection, Selection.Offset(1, 0))'区域
    .SortMethod=xlPinYin                  '中文排序方式为以拼音为基准
    .Apply
    End With
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 选中A1∶A13单元格,用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,选区字母立即按升序排序,而首行标题不参与排序,结果如图4.4所示。

图4.3 待排序的原始数据

图4.4 已将字母按升序排列

提示

本实例参见光盘样本:..\第4部分\实例119.xlsm。

【相关知识说明】

SortMethod=xlPinYin:表示排序方式是按拼音顺序排列。

实例120 对选区文本以笔画顺序降序排序

【技巧说明】 对选区文本以笔画顺序降序排序。

【案例介绍】 将选区文本按笔画顺序从多到少重新排序,但标题不参与排序。初始数据如图4.5所示。

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub对选区文本以笔画顺序降序排序且有标题()
  With ActiveWorkbook.ActiveSheet.Sort
        .SortFields.Clear                    '清除原排序信息
.SortFields.Add Key:=ActiveCell, SortOn:=xlSortOnValues,
          Order:=xlDescending, DataOption:=xlSortNormal
.SetRange Application.Intersect(Selection, Selection.Offset(1,
0))
.SortMethod=xlStroke                   '中文排序方式以笔画为基准
.Apply
End With
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 选中A1∶A11单元格,用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,选区文本立即按升序排序,而首行标题不参与排序,结果如图4.6所示。

图4.5 待排序的原始数据

图4.6 已将文本按降序排列

提示

本实例参见光盘样本:..\第4部分\实例120.xlsm。

【相关知识说明】

SortMethod=xlStroke:表示排序方式是按笔画顺序排列。

实例121 对选区数据按拼音排序并区分大小写

【技巧说明】 对选区数据按拼音排序并区分大小写。

【案例介绍】 将选区文本按拼音顺序重新排序并区分大小写,但标题不参与排序。初始数据如图4.7所示。

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub对选区文本分大小写按拼音顺序排序()
    With ActiveWorkbook.ActiveSheet.Sort
      .SortFields.Clear                    '清除原排序信息
      .SortFields.Add Key:=ActiveCell, SortOn:=xlSortOnValues,
              Order:=xlAscending, DataOption:=xlSortNormal
      .SetRange Application.Intersect(Selection, Selection.Offset(1, 0))'区域
      .MatchCase=True         '区分大小写
    .SortMethod=xlPinYin     '按拼音排序
    .Apply
End With
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 选中A1∶A13单元格,用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,选区字母立即按升序排序,而首行标题不参与排序,结果如图4.8所示。

图4.7 待排序的原始数据

图4.8 已将数据按拼音顺序排序且区分大小写

提示

本实例参见光盘样本:..\第4部分\实例121.xlsm。

【相关知识说明】

MatchCase:如果设置为True,则执行区分大小写的排序;如果设置为False,则执行不区分大小写的排序。可读/写。

实例122 对选区数据按笔画排序并区分大小写

【技巧说明】 对选区数据按笔画排序并区分大小写。

【案例介绍】 将选区文本按笔画顺序从少到多重新排序,对其中字母区分大小写,标题不参与排序。初始数据如图4.9所示。

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub对选区文本分大小写排序()
  With ActiveWorkbook.ActiveSheet.Sort
    .SortFields.Clear                    '清除原排序信息
        .SortFields.Add Key:=ActiveCell, SortOn:=xlSortOnValues,
              Order:=xlAscending, DataOption:=xlSortNormal
    .SetRange Application.Intersect(Selection, Selection.Offset(1, 0))'区域
    .MatchCase=True         '区分大小写
    .SortMethod=xlStroke     '按笔画排序
    .Apply
   End With
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 选中A1∶A13单元格,用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,选区数据立即按升序排序,而首行标题不参与排序,结果如图4.10所示。

图4.9 待排序的原始数据

图4.10 已将数据按笔画排序并区分大小写

提示

本实例参见光盘样本:..\第4部分\实例122.xlsm。