Excel VBA编程-一键删除表格里的空行和空列
- 2026-11-06 10:26:21
Excel VBA编程-一键删除表格里的空行和空列

从系统导出的表格,常常夹着几行空行、几列空列——打印出来难看,统计还容易把数据算错。网上很多“清理数据”的教程,第一步就是先把这些空行空列干掉。
今天学一个一键清理的本事:让 VBA 帮你把表格里整行整列都为空的部分,一次性清干净。
知识点:怎么判断“一行是不是空行”
核心就一句话:把这一行的每个格子都看一遍,只要有一个格子有内容,就保留;整行一个字都没有,才整行删除。
这里有两个新手最容易踩的坑,提前讲清楚:
必须“倒着删”:删掉第 5 行后,原来第 6 行会变成第 5 行,行号全错位。所以我们的代码一律从最下面一行往上数(Step -1),这样删掉上面的行,也不会影响还没检查的行。 别用错“删空”的方法:网上有一种一行写法 SpecialCells(xlCellTypeBlanks).EntireRow.Delete,它删的是“含有任意空格的行”,而不是“整行全空”。如果你的表格里有很多零散空单元格,用它会把一半数据都误删掉。我们今天的写法只删“整行真的什么都没有”的行,安全得多。
【SVG 示意图】
案例一(简单):一键删除整张表里的空行
功能说明:把当前工作表里“整行全空”的行全部删掉(保留第 1 行表头),其余有数据的行原封不动。适合从 ERP、网页导进来的表格,先清掉中间的空行。
操作步骤:
按 Alt + F11打开 VBA 编辑器,插入一个“模块”。把下面代码整段粘贴进去。 回到 Excel,按 Alt + F8选中“一键删除空行”,点“运行”。弹窗提示完成后,所有空行就都没了。
Sub 一键删除空行() Dim 末行 As Long, i As Long, 末列 As Long, j As Long Dim 全空 As Boolean 末行 = Cells(Rows.Count, 1).End(xlUp).Row 末列 = Cells(1, Columns.Count).End(xlToLeft).Column ' 从最下面一行往上数,倒着删才不会错位 For i = 末行 To 2 Step -1 全空 = True For j = 1 To 末列 If Cells(i, j).Value <> "" Then 全空 = False Exit For End If Next j If 全空 = True Then Rows(i).Delete End If Next i MsgBox "空行已删除!", vbInformationEnd Sub小提示:
For i = 末行 To 2 Step -1里的“2”是让开第 1 行表头,只检查数据区。如果你想连表头一起判断,把 2 改成 1 即可。
案例二(中等):一键删除整张表里的空列
功能说明:把“整列全空”的列全部删掉,从最右一列往左检查,避免删列后列号错位。适合清理那些没有任何数据的多余列。
操作步骤:
在模块里再粘贴下面代码。 运行“一键删除空列”。 弹窗提示完成后,所有空列就被清掉了。
Sub 一键删除空列() Dim 末列 As Long, j As Long, 末行 As Long, i As Long Dim 全空 As Boolean 末列 = Cells(1, Columns.Count).End(xlToLeft).Column 末行 = Cells(Rows.Count, 1).End(xlUp).Row ' 从最右一列往左数,倒着删才不会错位 For j = 末列 To 1 Step -1 全空 = True For i = 1 To 末行 If Cells(i, j).Value <> "" Then 全空 = False Exit For End If Next i If 全空 = True Then Columns(j).Delete End If Next j MsgBox "空列已删除!", vbInformationEnd Sub案例三(实用):一键同时清理空行和空列并报告数量
功能说明:一次性把空行和空列都清掉,并且弹窗告诉你“删了几行、删了几列”。先删空行(保留表头),再删空列,删完重新测量范围,确保清得彻底。
操作步骤:
在模块里粘贴下面代码。 确认当前表就是要清理的那张表。 运行“一键同时清理空行和空列”。 程序会弹窗报告“删除空行 N 行,空列 M 列”。
Sub 一键同时清理空行和空列() Dim 末行 As Long, 末列 As Long, i As Long, j As Long Dim 全空 As Boolean, 删行数 As Long, 删列数 As Long ' 第一步:先删空行(保留第 1 行表头) 末行 = Cells(Rows.Count, 1).End(xlUp).Row 末列 = Cells(1, Columns.Count).End(xlToLeft).Column For i = 末行 To 2 Step -1 全空 = True For j = 1 To 末列 If Cells(i, j).Value <> "" Then 全空 = False Exit For End If Next j If 全空 = True Then Rows(i).Delete 删行数 = 删行数 + 1 End If Next i ' 第二步:再删空列(行删完重新取范围) 末行 = Cells(Rows.Count, 1).End(xlUp).Row 末列 = Cells(1, Columns.Count).End(xlToLeft).Column For j = 末列 To 1 Step -1 全空 = True For i = 1 To 末行 If Cells(i, j).Value <> "" Then 全空 = False Exit For End If Next i If 全空 = True Then Columns(j).Delete 删列数 = 删列数 + 1 End If Next j MsgBox "清理完成:删除空行 " & 删行数 & " 行,空列 " & 删列数 & " 列。", vbInformationEnd Sub小提示:网上那种
SpecialCells(xlCellTypeBlanks).EntireRow.Delete一行写法,删的是“含任意空格的行”而不是“整行全空”。只要你的表里有零散空单元格,它就很可能误删数据。我们今天的逐格检查写法,只删真正空到底的行,更安全,推荐用这个。
知识点小结
判断“整行/整列全空”:把这一行(列)的每个格子都看一遍,有一个有内容就保留,全部为空才删除。 删除时必须倒着删(行从下往上、列从右往左),否则删掉一行后行号错位会漏删或重复删。 三套代码难度递进:删空行 → 删空列 → 一键同时清理并报告数量。 别用 SpecialCells(xlCellTypeBlanks)那种“删含空格的行”的写法,它容易误删数据。删除类操作不可撤销,动手前先备份原表。
往期精选(同系列教程)
Excel VBA编程-一键批量删除文本里的换行符和特殊符号 Excel VBA编程-一键清理文本 Excel VBA编程-一键从文本里提取指定内容 Excel VBA编程-一键把一列按分隔符拆分成多列 Excel VBA编程-一键批量给内容加固定前缀或后缀
其他信息
作者:西哥的AI幻觉 本文代码均已测试,可直接复制到 Excel VBA 编辑器运行。 文件请保存为 .xlsm格式(启用宏的工作簿),否则代码无法保存。动手前先备份原表,删除类操作不可撤销。
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。