You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel多列动态自定义排序VBA代码优化咨询

动态适配数据行数的VBA排序代码

你的现有代码依赖固定行数30533,当数据行数超过这个值时,超出部分不会被纳入排序范围。以下是修改后的代码,可自动识别工作表中的有效数据范围,适配任意行数的变化:

Sub Rx_Custom_Sort_1()
    Dim ws As Worksheet
    Dim lastRow As Long
    
    ' 赋值目标工作表,避免重复调用
    Set ws = ActiveWorkbook.Worksheets("Prescriptions_Clean_2b")
    
    ' 获取有效数据的最后一行(以A列为准,若A列有空行可替换为D/G等非空列)
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 清空原有排序规则
    ws.Sort.SortFields.Clear
    
    ' 添加排序规则:按D、E、F、G列升序
    ws.Sort.SortFields.Add2 Key:=ws.Range("D2:D" & lastRow), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ws.Sort.SortFields.Add2 Key:=ws.Range("E2:E" & lastRow), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ws.Sort.SortFields.Add2 Key:=ws.Range("F2:F" & lastRow), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ws.Sort.SortFields.Add2 Key:=ws.Range("G2:G" & lastRow), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    
    ' 应用排序到整个数据区域(A1到N列最后一行)
    With ws.Sort
        .SetRange ws.Range("A1:N" & lastRow)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

关键修改说明

  • 用lastRow变量动态获取有效数据的最后一行:通过Cells(Rows.Count, "A").End(xlUp).Row从A列底部向上查找第一个非空单元格,得到最后一行行号
  • 将所有固定的30533替换为lastRow,确保排序范围覆盖全部有效数据
  • 把工作表赋值给ws变量,减少重复代码调用,提升代码可读性和执行效率

注意事项

如果数据区域的A列存在空行,可将获取lastRow时的列参数("A")替换为D、E、F、G中任意一列(这些列是排序依据,肯定不会有空行),比如:

lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row

内容的提问来源于stack exchange,提问作者Rach Cohen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:45:10