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

Excel四万+行数据跨行列匹配:筛选指定条件的Model列表

解决方案:筛选符合条件的Model(Model Type=Interest 且对应Marge=Yes)

针对四万多行带空行、区块行数不固定的数据,提供两种可行方案:

一、Excel动态数组公式(适合Excel 365/2021及以上版本)

直接在空白单元格输入以下公式,自动返回所有符合条件的Model名称:

=FILTER(
    MID(FILTER(A:A,LEFT(A:A,6)="Model:"),8,LEN(FILTER(A:A,LEFT(A:A,6)="Model:"))-7),
    BYROW(
        FILTER(A:A,LEFT(A:A,6)="Model:"),
        LAMBDA(x,
            AND(
                INDEX(A:A,XLOOKUP("Model Type:",OFFSET(x,1,0):A$100000,"",,1)+ROW(x))="Interest",
                INDEX(A:A,XLOOKUP("Marge:",OFFSET(x,1,0):A$100000,"",,1)+ROW(x))="Yes"
            )
        )
    )
)

公式说明:

  1. FILTER(A:A,LEFT(A:A,6)="Model:"):提取所有包含"Model:"的行
  2. MID(...,8,...):从"Model: "后截取Model名称
  3. BYROW(...,LAMBDA(...)):对每个Model行,检查两个核心条件:
    • 向下定位第一个"Model Type:",取其下一行值是否为Interest
    • 向下定位第一个"Marge:",取其下一行值是否为Yes
  4. 最终返回同时满足两个条件的Model名称

二、VBA宏(适合大数据量,运行更高效)

按Alt+F11打开VBA编辑器,插入模块后粘贴以下代码,运行后会自动生成「筛选结果」工作表并输出符合条件的Model:

Sub FilterInterestModelsWithYesMarge()
    Dim ws As Worksheet, wsResult As Worksheet
    Dim lastRow As Long, i As Long, modelRow As Long
    Dim modelName As String
    Dim isInterest As Boolean, hasYesMarge As Boolean
    
    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 创建或激活结果工作表
    On Error Resume Next
    Set wsResult = ThisWorkbook.Worksheets("筛选结果")
    If Err.Number <> 0 Then
        Set wsResult = ThisWorkbook.Worksheets.Add
        wsResult.Name = "筛选结果"
    End If
    On Error GoTo 0
    wsResult.Cells.Clear
    wsResult.Range("A1").Value = "符合条件的Model"
    
    modelRow = 0
    For i = 1 To lastRow
        ' 定位Model区块起始行
        If Left(ws.Cells(i, "A").Value, 6) = "Model:" Then
            isInterest = False
            hasYesMarge = False
            modelName = Mid(ws.Cells(i, "A").Value, 8)
            modelRow = i
        ElseIf modelRow > 0 Then
            ' 在当前区块内匹配条件
            Select Case ws.Cells(i, "A").Value
                Case "Model Type:"
                    isInterest = (ws.Cells(i + 1, "A").Value = "Interest")
                Case "Marge:"
                    hasYesMarge = (ws.Cells(i + 1, "A").Value = "Yes")
                Case ""
                    ' 区块结束,判断是否符合条件
                    If isInterest And hasYesMarge Then
                        wsResult.Cells(wsResult.Rows.Count, "A").End(xlUp).Offset(1).Value = modelName
                    End If
                    modelRow = 0
            End Select
        End If
    Next i
    
    ' 处理无空行结尾的最后一个区块
    If modelRow > 0 And isInterest And hasYesMarge Then
        wsResult.Cells(wsResult.Rows.Count, "A").End(xlUp).Offset(1).Value = modelName
    End If
    
    MsgBox "筛选完成,结果已保存到「筛选结果」工作表", vbInformation
End Sub

代码逻辑:

  1. 遍历所有行,识别每个Model区块的起始位置
  2. 在区块内查找Model Type:和Marge:对应的取值
  3. 遇到空行(区块结束)时,判断是否同时满足两个条件,符合则写入结果表
  4. 兼容无空行结尾的最后一个区块

内容的提问来源于stack exchange,提问作者Ani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:40:21