MICROSOFT

EP11. “Sort a Range 排序范围”

首页 Microsoft 工具 Excel · VBA · Range Object · EP11
约 5 分钟· #EP11#Excel#Range Object
🔒 登录后可标记已读
  • VBA 里的 Range.Sort 方法能直接调用 Excel 内建的排序功能
  • 不用像 07_Loop/EP06 那样自己手写冒泡排序
  • 这篇讲从单列排序到多重条件排序、搭配 CurrentRegion 做动态排序的写法
  • 前置知识是 04_Range Object/EP01 的 CurrentRegion

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。


单列排序

Range("A1:A8").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo

Key1 是排序依据的列,Order1 是升序/降序,Header 表示这个范围有没有标题行。


两列范围、按其中一列排序

Range("A1:B8").Sort Key1:=Range("B2"), Order1:=xlDescending, Header:=xlYes

多重排序条件(先按 B 列、再按 C 列)

Range("A1:C8").Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("C2"), Order2:=xlDescending, Header:=xlYes

搭配 CurrentRegion 做动态排序

Range("A1").CurrentRegion.Sort Key1:=Range("B2"), Order1:=xlDescending, Header:=xlYes

数据笔数增加也能自动涵盖,不用手动改范围地址。

[截图:运行排序前后的数据对比,B 列数值从原本顺序变成排好序的顺序]


排序整张工作表(含空白行)

Cells.Sort Key1:=Columns("B"), Order1:=xlDescending, Header:=xlYes

方法怎么选

场景写法备注
单一固定范围,按一列排序Range("A1:A8").Sort Key1:=...范围地址写死,数据笔数变多要手动改
按多列(先 B 后 C)排序Key2:=...Order2:=...排序优先级看 Key1、Key2 的顺序
数据笔数会变动Range("A1").CurrentRegion.Sort ...用 CurrentRegion 自动涵盖新增数据
排序整张工作表(含空白行)Cells.Sort Key1:=Columns("B"), ...排序对象是 Cells 不是单一 Range

学完你会

  • ✅ 用 Range.Sort 写出单列、多列排序,不用手写冒泡排序
  • ✅ 用 Key1/Key2 设定排序优先级,Header 参数正确标注有没有标题行
  • ✅ 搭配 CurrentRegion 写出数据笔数变动也不用改代码的动态排序

常见错误

  • Header 参数设错(有标题行却设 xlNo,或反过来),标题行被当成数据一起排序
  • 多重排序时 Key1/Key2 的优先级顺序搞反,排序结果不是预期的样子
  • 范围写死成固定地址,数据笔数变多之后排序漏掉了新增的部分——应该改用 CurrentRegion

Sources

Blog / Website:

  1. Sort a Range