ARTICLE · 1358900
Excel VBA编程-一键批量清除批注(删除多余评论)

一个常被忽略的小麻烦
上回我们学会了用 VBA 给格子"贴小纸条"(批注),对账、复核都方便。可财务小陈贴完一整张表,发现满屏都是右上角的小红三角——发给领导前,得把这些临时批注一次性撕掉,手工一个个点太慢了。
其实清除批注和添加批注一样,也能用一行命令批量搞定。今天我们就把"删批注"变成一键操作,而且删之前还会先数清楚删了几条,心里有底。
今天的知识点
清除单元格批注,核心有两个方法,都作用在"单元格对象"上:
范围.ClearComments:把一片区域里的所有批注一次性清掉,不管里面有多少条。单元格.Comment.Delete:删掉单个格子的批注,但要先确认"这个格子确实有批注",否则会报错。
微软官方文档和主流教程(extendoffice、access-excel.tips、dashboardsexcel、howtoteck、tsight 等)都确认了这两种写法:Cells.ClearComments 能清空整张表或整本工作簿的批注,而循环检查 Comment Is Nothing 后再 Comment.Delete 可以做到"只删有批注的格子"并统计数量。今天我们先用最基础的语法把它们改写成零基础也能看懂的样子。
一个小提醒:删除批注和删除行一样,操作不可撤销。动手前请先按 Ctrl+S 保存,或另存一份备份,确认无误再跑宏。
【SVG 示意图】
案例一(简单):选中区域一键清空批注
功能说明 先在 Excel 里用鼠标拖选一片区域(比如贴了批注的那几列),再运行本宏,选中区域里的所有批注会被一次性清除。适合"这一片只是临时备注,现在全不要了"的场景。
代码(可直接复制运行)
Sub 清空选中区域的批注() ' 先确认真的选中了东西,没选中就提示并退出 If Selection Is Nothing Then MsgBox "请先选中要清除批注的区域。", vbExclamation Exit Sub End If ' ClearComments 把选中区域里的所有批注一次性撕掉 Selection.ClearComments MsgBox "已清除选中区域的全部批注。", vbInformationEnd Sub操作步骤
在 Excel 里拖选要清批注的格子(比如 B2:D20)。 按 Alt+F11 打开 VBA 编辑器,点"插入 → 模块",把上面代码粘贴进去。 回到 Excel,先按 Ctrl+S 把文件保存成 .xlsm 格式。 按 Alt+F8,选"清空选中区域的批注",点"运行"。 选中区域里的小红三角会立刻消失,数据本身不受影响。
案例二(中等):自己输入列号,清除某一列的批注
功能说明 弹出一个输入框,你输入列号(例如 2 表示 B 列),宏就会只清这一列的批注,并且告诉你一共删了几条。比"选中一片"更精准,不用先手动框选。
代码(可直接复制运行)
Sub 清空指定列的批注() Dim 列号 As Long Dim 末行 As Long Dim i As Long Dim 计数 As Long 计数 = 0 ' 弹窗输入列号,例如 2 表示 B 列 列号 = Val(InputBox("请输入要清除批注的列号(如 2 表示 B 列):", "清除指定列批注")) If 列号 <= 0 Then MsgBox "列号不正确,已取消。", vbExclamation Exit Sub End If ' 找到该列最后一行有内容的位置 末行 = Cells(Rows.Count, 列号).End(xlUp).Row ' 逐行检查,有批注才删,并统计删了几条 For i = 1 To 末行 If Cells(i, 列号).Comment Is Not Nothing Then Cells(i, 列号).Comment.Delete 计数 = 计数 + 1 End If Next i MsgBox "已清除第 " & 列号 & " 列的批注,共删除 " & 计数 & " 条。", vbInformationEnd Sub操作步骤
同上把代码粘进模块,保存为 .xlsm。 按 Alt+F8 运行"清空指定列的批注"。 在弹窗里输入列号(如 2 代表 B 列),点确定。 跑完会弹出提示"共删除 N 条",这一列的批注就全清干净了,其他列纹丝不动。
案例三(实用小案例):遍历整张表清除所有批注并计数
功能说明 有时候你也不确定批注散落在哪些格子。这个案例会自动扫描整张表,凡是带批注的格子都清掉,最后汇报一共删了多少条。相当于"全表大扫除",一键还原清爽表格。
代码(可直接复制运行)
Sub 清空整张表批注并计数() Dim 末行 As Long Dim 末列 As Long Dim i As Long Dim j As Long Dim 计数 As Long 计数 = 0 ' 用 A 列和第一行分别找到数据区的边界 末行 = Cells(Rows.Count, 1).End(xlUp).Row 末列 = Cells(1, Columns.Count).End(xlToLeft).Column ' 一格一格扫过去,有批注就删并计数 For i = 1 To 末行 For j = 1 To 末列 If Cells(i, j).Comment Is Not Nothing Then Cells(i, j).Comment.Delete 计数 = 计数 + 1 End If Next j Next i MsgBox "已清除整张表的批注,共删除 " & 计数 & " 条。", vbInformationEnd Sub操作步骤
把代码粘进模块,保存为 .xlsm。 确认要清理的数据在当前工作表(宏只处理"当前表")。 按 Alt+F8 运行"清空整张表批注并计数"。 跑完弹出"共删除 N 条",整张表的小红三角全部消失,格子里的数据照常保留。
知识点小结
清除批注有两个核心方法:一片区域用 范围.ClearComments一次性清掉;单个格子用单元格.Comment.Delete删掉,这是微软官方与主流教程都确认的标准写法。删除单个批注前,先用 If 单元格.Comment Is Nothing Then判断"有没有批注",有才删,可避免空格子报错,也方便做计数。用 Selection可处理"鼠标拖选"的区域;用Cells(行, 列)加循环可精准处理某一列或整张表,两者都只依赖零基础已学的语法。清除批注和删除行一样不可撤销,动手前一定先保存或备份文件,确认结果无误再正式使用。
往期精选
Excel VBA编程-一键给单元格批量添加批注 Excel VBA编程-一键把整本工作簿导出成一个 PDF(所有表合一) Excel VBA编程-一键批量保护所有工作表(统一加密码) Excel VBA编程-一键批量冻结所有工作表的首行 Excel VBA编程-一键冻结首行
其他信息
作者:西哥的AI幻觉 本套教程面向零基础办公人员,每篇只讲一个知识点,代码均可直接复制运行。 重要提醒:包含宏的文件请保存为"Excel 启用宏的工作簿(.xlsm)",.xlsx 格式会丢失代码。 下一篇预告:Excel VBA编程-一键批量隐藏或显示指定的行(让报表更清爽)















































































