EP08. “Delete Blank Cells 删除空白单元格”
🔒 登录后可标记已读- 这篇教怎么用 VBA 把一列里的空白单元格删掉,让剩下的数据往上补齐、不留空隙
- 做法是先把非空的值搬到辅助列,再整批复制回原列
- 前置知识:
For循环和Range的赋值操作 - 学完能理解「借助辅助列重新排列数据」这个常见技巧
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
完整 VBA 代码
Dim counter As Integer, i As Integer
counter = 0
For i = 1 To 10
If Cells(i, 1).Value <> "" Then
Cells(counter + 1, 2).Value = Cells(i, 1).Value
counter = counter + 1
End If
Next i
Range("A1:A10").Value = ""
Range("A1:A10").Value = Range("B1:B10").Value
Range("B1:B10") = ""
代码说明
- 声明
counter(记录已复制了几个非空值)、i(循环变量)两个Integer变量,counter初始化为 0 - 用
For i = 1 To 10循环遍历第一列(A 列)第 1 到第 10 行 - 用
Cells(i, 1).Value <> ""判断这个单元格是不是非空(<>表示"不等于"),是非空的才处理 - 把这个非空值写到第二列(B 列)的
counter + 1行——因为counter从 0 开始,第一个非空值会写到 B1,第二个写到 B2,以此类推,这样非空值在 B 列会紧密排列、不留空隙 - 每复制一个值,
counter加 1 - 循环结束后,先清空 A1:A10,再把 B1:B10(已经紧密排列好的非空值)整批复制回 A1:A10,最后清空辅助列 B1:B10
怎么运行
Alt + F11 打开 VBA 编辑器,把代码放进按钮点击事件,按 F5 或点命令按钮执行,A 列的空白单元格会被移除,数据自动往上靠齐。
[截图:运行前后 A 列的对比,原本夹杂空白格的数据,运行后空白格消失、数据紧密往上排列]
学完你会
- ✅ 会用
<> ""判断单元格是否非空 - ✅ 会用辅助列 + 计数器把非空值紧密排列
- ✅ 理解为什么最后要把结果复制回原列、再清空辅助列
常见错误
- 循环范围写死是
1 To 10,如果实际数据超过 10 行,超出部分不会被处理;数据行数不固定时要记得同步改这个上限,或改成动态抓取最后一行 - B 列(辅助列)如果本来就有其他数据,会被这段代码覆盖又清空,执行前要确认 B 列是空的,或换一个没在用的列当辅助列
- 这段代码是"删除空白后数据上移",不是"隐藏空白行"——原本 A 列的行号跟数据的对应关系会改变,如果旁边其他列(B、C...)有跟 A 列同一行对应的数据,这个操作会让数据对不上,只适合单独处理一列的场景
Sources
Blog / Website: