![Excel VBA范例大全](https://wfqqreader-1252317822.image.myqcloud.com/cover/777/687777/b_687777.jpg)
第18章 多条件排序
多条件排序包括两种状况:
● 对多列进行排序,每列一个排序条件;
● 对单列进行排序,一列中多个条件。
本章对多条件排序中存在的技巧进行实例演示。
● 实例126双条件排序:首列数值升序、次列笔画降序
● 实例127背景色和拼音单列双条件排序
实例126 双条件排序:首列数值升序、次列笔画降序
【技巧说明】 以首列数值升序、次列笔画降序方式对双列进行排序。
【案例介绍】 对双列数据也可以是多列数据排序,但排序条件只有两个,当前列按数值升序排列,当前列右边列按笔画降序排列。初始数据如图4.17所示。
【案例实现】 参见以下步骤:
[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。
[2] 单击菜单【插入】\【模块】,打开模块代码窗口。
[3] 在右边代码窗口输入以下代码:
Sub双条件排序首列升序次列降序() With ActiveWorkbook.ActiveSheet.Sort .SortFields.Clear .SortFields.Add Key:=Application.Intersect(ActiveCell.EntireColumn, ActiveCell.CurrentRegion),SortOn:=xlSortOnValues, Order:= xlAscending '首列按数值升序排序 .SortFields.Add Key:=Application.Intersect(ActiveCell.Offset(0, 1) .EntireColumn, ActiveCell.CurrentRegion),SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal '次列以笔画为基准降序排序 .SetRange Application.Intersect(Selection.CurrentRegion, Selection. CurrentRegion.Offset(1, 0)) .SortMethod=xlStroke .Apply End With End Sub
[4] 关闭VBE窗口返回到工作表。
[5] 选中B5单元格(光标位置很重要,激活不同列有不同结果),用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,B列数据除首行外均按数值升序排列;C列按笔画排序作为次要关键字对数据按笔画降序排列,即在B列排序之后,若B列有多个相同数值,则对应的C列数据按笔画次序降序排列;若B列未出现相同数据,则次要关键字条件不起任何作用。结果如图4.18所示。
![](https://epubservercos.yuewen.com/AED0BE/3590497903471501/epubprivate/OEBPS/Images/figure_0201_0007.jpg?sign=1739145546-k9n3oweeKtpBEQj9PGAb4uobjkR1uq1k-0-0a03878b2b375973481013de0a77df6d)
图4.17 待排序的原始数据
![](https://epubservercos.yuewen.com/AED0BE/3590497903471501/epubprivate/OEBPS/Images/figure_0201_0008.jpg?sign=1739145546-M5rn1dpjwlv8pvB2jWQYoed29TSrxtVF-0-ac649f78a809f8d99307707355bb7f6e)
图4.18 已将扩展数据区域按双条件排序
提示
本实例参见光盘样本:..\第4部分\实例126.xlsm。
实例127 背景色和拼音单列双条件排序
【技巧说明】 按背景色和拼音对单列数据进行双条件排序。
【案例介绍】 对一列数据排序,将与当前单元格背景色一致的所有数据移至最顶端;对于同颜色的数据,再以第二关键字按拼音顺序进行升序排列。初始数据如图4.19所示。
【案例实现】 参见以下步骤:
[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。
[2] 单击菜单【插入】\【模块】,打开模块代码窗口。
[3] 在右边代码窗口输入以下代码:
Sub单列双条件排序背景色和拼音() With ActiveWorkbook.ActiveSheet.Sort .SortFields.Clear .SortFields.Add(Application.Intersect(ActiveCell.EntireColumn, ActiveCell.CurrentRegion),xlSortOnCellColor, xlAscending) .SortOnValue.Color=ActiveCell.Interior.Color '条件一:当前单元格背景色置顶 .SortFields.Add Key:=Application.Intersect(ActiveCell.EntireColumn, ActiveCell.CurrentRegion),SortOn:=xlSortOnValues, Order:=xlAscending .SetRange Application.Intersect(ActiveCell.EntireColumn, ActiveCell.CurrentRegion) .SortMethod=xlPinYin '条件二:中文排序方式为以拼音为基准 .Apply End With End Sub
[4] 关闭VBE窗口返回到工作表。
[5] 选中A8单元格,用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,则A1:A13区域中与A8单元格背景色一致的单元格置顶;同时,若有多个单元格数据与A8背景色相同,则对此多个单元格以第二条件——拼音顺序排序。结果如图4.20所示。
![](https://epubservercos.yuewen.com/AED0BE/3590497903471501/epubprivate/OEBPS/Images/figure_0202_0007.jpg?sign=1739145546-mzE5GApmozVAVfYel8usm0BVuUUWGs6w-0-82a80a3697e2c6029f7762c9435ea82d)
图4.19 待排序的原始数据
![](https://epubservercos.yuewen.com/AED0BE/3590497903471501/epubprivate/OEBPS/Images/figure_0202_0008.jpg?sign=1739145546-15Ub5FZpAoMNT3OIvM7ioxPmGcoyfDv3-0-d36cd407b8350562ff9c502f507292ca)
图4.20 已将单列按双条件排序
提示
本实例参见光盘样本:..\第4部分\实例127.xlsm。