Microsoft Lab
全部软件
Excel条件判断(If Then Statement)约 4 分钟

Delete Blank Cells 删除空白单元格

重点内容


适用版本

桌面版通用(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
只记在你的浏览器里,换设备不会同步。