如何在Excel工作表中搜索多个值并复制对应行?
扩展VBA高级筛选的搜索值范围
原代码通过硬编码方式指定了两个搜索值,筛选条件区域固定为3行,导致无法灵活添加更多搜索目标。可以通过数组存储搜索值+动态生成条件区域的方式解决这个问题,具体修改后的代码如下:
Sub Filter() Dim ws As Worksheet, i%, C As Range, D As Range, E As Range Dim searchValues As Variant, valIndex As Integer ' 定义需要搜索的所有值,直接在这里添加/删除即可 searchValues = Array("'08", "'09", "'10", "'11", "'12") Application.ScreenUpdating = False Set ws = Worksheets.Add(before:=Worksheets(1)) For i = 2 To Worksheets.Count With Worksheets(i) Set C = .Columns("A").Find(What:="Day", LookAt:=xlWhole, SearchDirection:=xlNext) Set D = .Cells(Rows.Count, "A").End(xlUp)(1, 4) Set E = ws.Cells(Rows.Count, "A").End(xlUp)(2) ' 写入条件标题行 E.Value = C.Value ' 循环写入所有搜索值 For valIndex = LBound(searchValues) To UBound(searchValues) E.Offset(valIndex + 1).Value = searchValues(valIndex) Next valIndex ' 动态设置筛选条件区域:标题行 + 所有搜索值行 .Range(C, D).AdvancedFilter 2, E.Resize(UBound(searchValues) - LBound(searchValues) + 2), E(UBound(searchValues) + 3), False ' 删除临时生成的条件区域行 E.Resize(UBound(searchValues) - LBound(searchValues) + 2 - CInt(E.Row <> 2)).EntireRow.Delete End With Next Application.ScreenUpdating = True End Sub
关键修改说明
- 搜索值数组:新增
searchValues数组,所有需要匹配的值都放在这里,后续要扩展搜索范围,直接在数组里添加新值(比如"'12")即可,无需修改其他代码逻辑 - 动态条件区域:根据数组的长度自动调整筛选条件区域的行数,避免了原代码固定3行的局限
- 循环写入值:通过循环把数组中的每个搜索值依次写入临时条件区域,不用手动逐个赋值
内容的提问来源于stack exchange,提问作者Geodav
相关产品推荐
相关产品推荐

