Excel 隐藏出现特定值的所有行的最有效方法

Excel 隐藏出现特定值的所有行的最有效方法,excel,vba,find,Excel,Vba,Find,如果标题有多行,则Excel自动筛选无法正常工作,并且它也不能仅分配给特定列。所以我想用VBA宏进行过滤 我有 但这只是隐藏了第一次出现“软件”时的争吵。没有办法使用。查找还是我必须使用循环?如果您的范围不是很大,您可以始终在其中循环,检查值,如果找到则隐藏: Sub test() Application.ScreenUpdating = False Dim lastRow As Integer, i As Integer Dim rng As Range, cel As Range las

如果标题有多行,则Excel自动筛选无法正常工作,并且它也不能仅分配给特定列。所以我想用VBA宏进行过滤

我有


但这只是隐藏了第一次出现“软件”时的争吵。没有办法使用。查找还是我必须使用循环?

如果您的范围不是很大,您可以始终在其中循环,检查值,如果找到则隐藏:

Sub test()
Application.ScreenUpdating = False
Dim lastRow As Integer, i As Integer
Dim rng As Range, cel As Range

lastRow = Sheet2.UsedRange.Rows.Count

For i = lastRow To 1 Step -1
  If Cells(i, 1).Value = "Software" or cells(i,1).Value = "software" Then
     Cells(i, 1).EntireRow.Hidden = True
  End If
Next i
Application.ScreenUpdating = True
End Sub

注意:
软件
部分区分大小写,这就是为什么我使用了

您认为它不能正确处理多个标题行是什么意思?如果只突出显示数据区域和底行,然后点击筛选按钮,则只会筛选选定的数据。我会避免在隐藏行或列时使用Find(),因为
Find()
不会在隐藏的行或列中找到单元格:这会使您的流程更难管理。对于非大范围,@BruceWayne的建议应该可以。@Scott Craner:我必须纠正自己:确实,您可以对第三、第四或更低行的列设置筛选器,但前提是不合并头单元格。并且不能将筛选器放置到单个非相邻列。很好,但是,你不必选择“最下面一行”-谁能告诉你,哪一行可能是(来的)?;-)@蒂姆·威廉姆斯:是的,我知道这一点,但所要求的目的不受这一限制的影响。该脚本将在进行后续筛选之前取消隐藏所有行。非常感谢您提供该脚本。这很有帮助,尽管我确实想知道,Find方法是否可以选择所有匹配结果,即使它们是非相邻的。当然,这会使参数SearchOrder和SearchDirection变得不可用。使用find,如果您想找到所有单元格的单元格地址,我可能会创建一个数组,然后获取单元格,如
myCellAddress=cells.find(What:=“software”,MatchCase:=False)。
。这是一个很好的例子。
Sub test()
Application.ScreenUpdating = False
Dim lastRow As Integer, i As Integer
Dim rng As Range, cel As Range

lastRow = Sheet2.UsedRange.Rows.Count

For i = lastRow To 1 Step -1
  If Cells(i, 1).Value = "Software" or cells(i,1).Value = "software" Then
     Cells(i, 1).EntireRow.Hidden = True
  End If
Next i
Application.ScreenUpdating = True
End Sub