You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:00:54