VBA报错Error 13:Select Case模糊匹配*xxx*文本删除行失败
错误原因
- Error 13为类型不匹配错误,你代码中直接读取
Range("B7:B1048576").Value,这个多单元格区域的Value属性返回的是二维数组,不能直接放入Select Case语句中做判断,类型不匹配直接触发报错。 - 其次你写的
*Transpalette*通配符在Select Case默认逻辑中是做全等判断,不会自动执行模糊匹配,就算传入单个单元格的值也没法正确匹配到含有关键词的内容。 - 额外逻辑问题:删除行时调用Selection.EntireRow.Delete没有绑定明确的行范围,误选其他区域会导致删错内容;如果从前往后遍历删除,还会出现行号偏移漏删的问题。
解决方案
修正后的可运行代码如下:
Sub 保留B列含关键词的行() Dim ws As Worksheet Dim lastRow As Long Dim i As Long ' 可替换为你实际要处理的工作表名称,比如Set ws = Sheets("销售表") Set ws = ActiveSheet ' 获取B列最后一行有内容的行号,避免遍历整列浪费性能 lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row ' 从最后一行倒序遍历,避免删行导致行号偏移漏判 For i = lastRow To 7 Step -1 ' 用Like运算符实现模糊匹配,判断是否包含指定关键词 If Not ws.Cells(i, "B").Value Like "*Transpalette*" Then ws.Rows(i).Delete End If Next i End Sub
额外优化说明
- 如果需要匹配时不区分大小写,可在模块最顶部添加
Option Compare Text。 - 数据量超过1万行的话,可以先把B列内容读入数组批量判断,再统一删除符合条件的行,运行速度会提升数倍。
内容的提问来源于stack exchange,提问作者Iron Dragon
相关产品推荐
相关产品推荐

