选择单元格区域、按前缀筛选并隐藏行(区域设置存在问题)
修正VBA代码:按前缀筛选并隐藏行
原代码核心问题
- Range对象赋值错误:
Set rng = Range(ActiveCell, ActiveCell.End(xlDown)).Select里的.Select完全多余,Select方法返回的是操作是否成功的布尔值,没法直接赋值给Range变量,会导致rng对象赋值失败。 - 区域选择有隐患:
ActiveCell.End(xlDown)如果活动单元格下方全是空行,会直接跳到工作表最后一行,选中大量无效区域。 - 前缀匹配不够精准:用
InStr判断包含关系,可能误匹配到中间包含TP001P的内容,不如用通配符Like直接匹配前缀。
修正后的完整代码
Sub Group() Dim arrList As Variant Dim rng As Excel.Range Dim rCell As Range Dim N As Long ' 选中活动单元格到当前列最后一个非空单元格的有效区域 Set rng = Range(ActiveCell, ActiveCell.Parent.Cells(Rows.Count, ActiveCell.Column).End(xlUp)) arrList = Array("TP001P*") For Each rCell In rng.Cells For N = LBound(arrList) To UBound(arrList) ' 用Like匹配前缀通配符,精准筛选开头为TP001P的内容 If rCell.Value Like arrList(N) Then rCell.EntireRow.Hidden = True Exit For End If Next N Next rCell End Sub
关键改动说明
- 修正区域赋值:去掉
.Select,改用从工作表底部向上查找当前列最后一个非空单元格的方式,确保只选中有数据的区域,避免无效空行。 - 优化匹配逻辑:用
Like替代InStr,直接利用通配符*匹配前缀,逻辑更直观,也避免误匹配。 - 增强代码健壮性:用
ActiveCell.Parent明确引用当前单元格所在的工作表,防止跨工作表操作时出错。
内容的提问来源于stack exchange,提问作者Yolanda CB
相关产品推荐
相关产品推荐

