当前位置: 首页 > article >正文

【Excel】【VBA】双列排序:坐标从Y从大到小排列之后相同Y坐标的行再对X从小到大排列

Excel VBA 双列排序

在这里插入图片描述

功能概述

这段VBA代码实现了Excel中的双列排序功能,具体是:

  1. 跳过前3行表头
  2. 先按C列数据从大到小排序
  3. 在C列值相同的情况下,按B列从大到小排序
  4. 排序时保持整行数据的完整性

流程图

开始
定义工作表和变量
获取最后一行行号
设置数据格式
定义排序范围
清除已有排序字段
添加第一个排序键:C列
添加第二个排序键:B列
执行排序
显示完成提示
结束

代码详解

1. 变量声明和初始化

Dim ws As Worksheet
Dim lastRow As Long
Dim sortRange As Range
    
Set ws = ActiveSheet
  • Worksheet: 工作表对象
  • lastRow: 存储数据的最后一行行号
  • sortRange: 定义排序范围

2. 获取数据范围

lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
  • 使用End(xlUp)方法从底部向上查找最后一个非空单元格

3. 格式设置

With ws.Range("B4:C" & lastRow)
    .NumberFormat = "0.00"    '设置为2位小数
    .Value = .Value           '刷新值
End With
  • 设置B列和C列的数字格式
  • 通过重新赋值来刷新单元格内容

4. 排序范围定义

Set sortRange = ws.Range("A4:E" & lastRow)
  • 从第4行开始(跳过表头)
  • 包含A到E列的所有数据

5. 排序实现

With ws.Sort
    .SortFields.Clear
    .SortFields.Add Key:=ws.Range("C4:C" & lastRow), _
        SortOn:=xlSortOnValues, _
        Order:=xlDescending, _
        DataOption:=xlSortNormal
    .SortFields.Add Key:=ws.Range("B4:B" & lastRow), _
        SortOn:=xlSortOnValues, _
        Order:=xlDescending, _
        DataOption:=xlSortNormal
    .SetRange sortRange
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

关键参数说明:

  • SortFields.Clear: 清除现有排序条件
  • SortOn:=xlSortOnValues: 按值排序
  • Order:=xlDescending: 降序排列
  • Header = xlNo: 不包含表头
  • SortMethod = xlPinYin: 使用拼音排序方法

使用注意事项

  1. 确保数据从第4行开始
  2. 数据列需要在A到E列之间
  3. 数据格式应为数字类型
  4. C列为第一排序键,B列为第二排序键

V20250116 X从大到小

Sub SortTwoColumnsWithHeaders()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim sortRange As Range
    
    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
    
    '确保数据格式正确(从第4行开始)
    With ws.Range("B4:C" & lastRow)
        .NumberFormat = "0.00"    '设置为5位小数
        .Value = .Value              '刷新值
    End With
    
    '定义排序范围(从A列到E列,从第4行开始)
    Set sortRange = ws.Range("A4:E" & lastRow)
    
    '执行排序
    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=ws.Range("C4:C" & lastRow), _
            SortOn:=xlSortOnValues, _
            Order:=xlDescending, _
            DataOption:=xlSortNormal
        .SortFields.Add Key:=ws.Range("B4:B" & lastRow), _
            SortOn:=xlSortOnValues, _
            Order:=xlDescending, _
            DataOption:=xlSortNormal
        .SetRange sortRange
        .Header = xlNo               '因为真正的数据从第4行开始,所以这里设置为No
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    MsgBox "排序完成!"
End Sub


V20250116 每行的X从小到大升序排列

Sub SortTwoColumnsWithHeaders()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim sortRange As Range
    
    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
    
    '确保数据格式正确(从第4行开始)
    With ws.Range("B4:C" & lastRow)
        .NumberFormat = "0.00"    '设置为5位小数
        .Value = .Value              '刷新值
    End With
    
    '定义排序范围(从A列到E列,从第4行开始)
    Set sortRange = ws.Range("A4:E" & lastRow)
    
    '执行排序
    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=ws.Range("C4:C" & lastRow), _
            SortOn:=xlSortOnValues, _
            Order:=xlDescending, _
            DataOption:=xlSortNormal
        .SortFields.Add Key:=ws.Range("B4:B" & lastRow), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            DataOption:=xlSortNormal
        .SetRange sortRange
        .Header = xlNo               '因为真正的数据从第4行开始,所以这里设置为No
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    MsgBox "points order finshied!"
End Sub



http://www.kler.cn/a/506818.html

相关文章:

  • 大疆发布可折叠航拍无人机,仅重249g,支持 4800 万像素拍摄
  • LabVIEW 程序中的 R6025 错误
  • Linux浅谈——管道、网络配置和客户端软件的使用
  • 金融项目实战 05|Python实现接口自动化——登录接口
  • 【RDMA学习笔记】1:RDMA(Remote Direct Memory Access)介绍
  • Deep4SNet: deep learning for fake speech classification
  • 【matlab】matlab知识点及HTTP、TCP通信
  • npm发布工具包+使用
  • windows11下 podman-desktop 复制插件文件 到 RabbitMQ 容器内,并启用
  • 安全规约、脱敏规范、敏感逻辑的保护方案、防止 SQL 注入
  • 25/1/16 嵌入式笔记 STM32F108
  • C语言结构体漫谈:从平凡中见不平凡
  • 《基于深度学习的多色光度巡天项目天文目标检测框架》论文精读
  • 1 使用EMIO
  • 【Axure】配色库
  • 5、docker-compose和docker-harbor
  • 电池预测 | 第21讲 基于Gamma伽马模型结合EM算法和粒子滤波算法参数估计的锂电池剩余寿命预测
  • python中自动化playwright录制功能跳过繁琐的系统登录操作
  • Git在add的时候出现error: unable to index file 的问题,导致add失败的问题解决
  • 大数据就业前景及待遇如何?
  • 打造更安全的Linux系统:玩转PAM配置文件
  • 为Hugo/Hexo设计的在线Markdown编辑器
  • Flutter 多终端测试 自定义启动画面​​​​​​​ 更换小图标和应用名称
  • RK3568-Linux应用学习记录
  • 复用类(2):代理、结合使用组合和继承
  • 三数之和力扣--15