提示:思路仅供参考,具体情况请具体对待
前言
特定场景:
工作中经常遇到一些软件导出的表格,其中的各级小计分布在不同的列,“小计”二字之间有的还加入了数量不等的空格,实际统计时这些小计行在其中非常碍事,于是得想个办法快速删掉它。
提示:删除内容有风险,请谨慎测试
一、思路
如果用循环逐单元格取值判断是否包含某字符,速度会非常慢,只有在没有其他办法可想的时候才用这种办法。
快速定位的方法很多,但最快的应该还是Excel自带的方法:
Range.SpecialCells()可以非常快速的定位目标单元格
Range.SpecialCells(xlCellTypeFormulas, 16)可以快速定位出错单元格
其中xlCellTypeFormulas是公式,16是错误
如果我给这些需要定位的单元格,赋予一个错误的公式,比如“=1/0”,则会返回“#DIV/0!”的错误提示。
然后来定位这些错误单元格,一次性删除掉。
但是如果表格里真的有这些错误提示,而又需要保留,则会存在误删。
考虑了一下,用常量来表示,就更合适了。
Range.SpecialCells(xlCellTypeConstants, 16)
其中xlCellTypeConstants是常量,16是错误
当单元格出现错误文本就可以快速定位了。
而我们多半不会在单元格里手动去输入一个#DIV/0!或者#NAME?吧?
二、写代码
Sub 删除_包含指定内容的行()
On Error Resume Next
h = InputBox("请输入包含的内容(支持通配符)", "开水瓶里游泳提醒您", "小*计")
If h = "" Then Exit Sub
Cells.Replace What:=h, Replacement:="#NAME?", Lookat:=xlWhole
Cells.SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
End Sub
总结
先将符合条件的文本替换为错误提示文本,然后利用错误提示快速定位删除。
解决问题的方法有很多,而循环是效率最低的,利用软件内置的一些定位功能,可以让代码提速不少。