EP11. “Sort a Range 排序范围”
🔒 登录后可标记已读- 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: