MICROSOFT

EP08. “Delete Blank Cells 删除空白单元格”

首页 Microsoft 工具 Excel · VBA · If Then Statement · EP08
约 5 分钟· #EP08#Excel#If Then Statement
🔒 登录后可标记已读
  • 这篇教怎么用 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") = ""

代码说明

  1. 声明 counter(记录已复制了几个非空值)、i(循环变量)两个 Integer 变量,counter 初始化为 0
  2. For i = 1 To 10 循环遍历第一列(A 列)第 1 到第 10 行
  3. Cells(i, 1).Value <> "" 判断这个单元格是不是非空(<> 表示"不等于"),是非空的才处理
  4. 把这个非空值写到第二列(B 列)的 counter + 1 行——因为 counter 从 0 开始,第一个非空值会写到 B1,第二个写到 B2,以此类推,这样非空值在 B 列会紧密排列、不留空隙
  5. 每复制一个值,counter 加 1
  6. 循环结束后,先清空 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:

  1. Delete Blank Cells