前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA: 使用Sort方法进行排序

VBA: 使用Sort方法进行排序

作者头像
Exploring
发布2022-09-20 14:50:27
6.1K0
发布2022-09-20 14:50:27
举报
文章被收录于专栏:数据处理与编程实践

文章背景: 在Excel中,对数值的排序依据是数值的大小、对文本的排序依据是文本首字母。但是对文本与数字组合形式,excel排序的结果有时不尽如人意。如下的一列数据,是通过Sort升序后的结果:

代码语言:javascript
复制
样品单号
SH22-022-1
SH22-022-12
SH22-022-13
SH22-022-7
SH22-022-8

可以看到,排序后的结果并不是我们想要的1,7,8,12,13。

面对这种情况,我们可以通过添加辅助列,然后基于辅助列进行排序。

1 单条件排序

单元格C2内的公式:TEXT(MID(B2,10,4),"0000")

通过录制宏的方式,得到sort排序的VBA代码,整理之后,记录如下:

代码语言:javascript
复制
Sub 单条件排序()

    '1 设置排序的条件
    With ActiveSheet.Sort.SortFields
    
        .Clear                          '清除工作表所有的SortFields对象。
        .Add2 Key:=Range("C2:C6"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    
    End With
    
    '2 排序
    With ActiveSheet.Sort
    
        .SetRange Rows("2:6")           '排序区域
        .Header = xlNo                  '排序区域不包含标题
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        
    End With
    
End Sub

(1)上述代码的功能是,基于辅助列(C列),对2至6行进行升序排列。

(2)DataOption有两个选择,分别是xlSortNormalxlSortTextAsNumbers。上述代码内采用的是xlSortNormal。

xlSortNormal -- default. Sorts numeric and text data separately.

xlSortTextAsNumbers -- Treat text as numeric data for the sort.

2 多条件排序

单元格C2内的公式:MID(B2,11,1)

单元格D2内的公式:TEXT(MID(B2,12,4),"0000")

通过录制宏的方式,得到sort排序的VBA代码,整理之后,记录如下:

代码语言:javascript
复制
Sub 多条件排序()

    '1 设置排序的条件
    With ActiveSheet.Sort.SortFields
    
        .Clear
        
        .Add2 Key:=Range("C2:C8"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        
        .Add2 Key:=Range("D2:D8"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    
    End With

   '2 排序
    With ActiveSheet.Sort
    
        .SetRange Rows("2:8")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        
    End With
    
End Sub

上述代码的功能是,基于辅助列(C列和D列),对2至8行进行升序排列。

参考资料:

[1] vba多条件排序(https://www.csdn.net/tags/NtTaYgzsNTA1MTUtYmxvZwO0O0OO0O0O.html

[2] “一网打尽”Excel排序过程中遇到的那些“坑”(https://cloud.tencent.com/developer/news/486934

[3] XlSortDataOption enumeration(https://docs.microsoft.com/en-us/office/vba/api/excel.xlsortdataoption

[4] 只需两步,轻松解决Excel数据混乱的问题(https://cloud.tencent.com/developer/news/879855

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与编程实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 单条件排序
  • 2 多条件排序
相关产品与服务
数据库一体机 TData
数据库一体机 TData 是融合了高性能计算、热插拔闪存、Infiniband 网络、RDMA 远程直接存取数据的数据库解决方案,为用户提供高可用、易扩展、高性能的数据库服务,适用于 OLAP、 OLTP 以及混合负载等各种应用场景下的极限性能需求,支持 Oracle、SQL Server、MySQL 和 PostgreSQL 等各种主流数据库。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档