如何通过VBA实现Excel多列排序时空单元格置顶?
Excel排序时空单元格置于顶部的实现方法
方法一:辅助列法(通用适配所有Excel版本)
- 在目标列旁插入空白辅助列,比如目标列是A列,就在B1单元格输入公式:
=IF(ISBLANK(A1),0,1) - 下拉填充公式到数据最后一行,空单元格对应的辅助列值为0,非空单元格为1
- 选中包含辅助列的全部数据区域,点击「数据」选项卡→「排序」
- 在排序对话框中:
- 主要关键字选辅助列,排序依据选「数值」,次序选「升序」
- 点击「添加条件」,选择实际要排序的目标列,排序依据选「单元格值」,次序按需选「升序/降序」
- 排序完成后可直接删除辅助列
方法二:自定义排序规则(适合Excel 2010及以上版本)
- 选中要排序的列,点击「数据」→「排序」
- 在排序对话框的「次序」下拉菜单里,选择「自定义序列」
- 在弹出的自定义序列窗口中,点击「新序列」,输入一个数据中不存在的特殊字符(比如
¤),点击「添加」后确定 - 回到排序对话框,次序选择刚创建的自定义序列,点击确定即可
- 空单元格会自动排在顶部,非空内容按A-Z升序排列
方法三:VBA宏一键操作(适合频繁处理的场景)
- 按下
Alt+F11打开VBA编辑器,右键点击当前工作簿→「插入」→「模块」 - 在模块中粘贴以下代码:
Sub SortBlanksTop() Dim targetRng As Range Set targetRng = Selection ' 先将空单元格移至顶部 targetRng.Sort Key1:=targetRng, Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom ' 对非空区域按A-Z升序排序 On Error Resume Next ' 避免无空单元格时报错 targetRng.SpecialCells(xlCellTypeConstants).Sort Key1:=targetRng, Order1:=xlAscending, _ Header:=xlYes, MatchCase:=False, Orientation:=xlTopToBottom On Error GoTo 0 End Sub
- 保存工作簿为「启用宏的工作簿」(.xlsm格式)
- 选中要排序的列,按下
Alt+F8选择SortBlanksTop执行即可
内容的提问来源于stack exchange,提问作者John Miller
相关产品推荐
相关产品推荐

