在 excel 中与查询单元格中的多个值匹配

Match in excel with multiple values in query cell

我有一列包含特殊基因组的列表。还有另一列基因组,其中一些细胞有多个条目,以逗号分隔。我想要的是检查第二列的每个单元格是否是第一列中的任何条目。如果第二列中的单元格只有一个元素,我可以用 =NOT(ISERROR(MATCH(B2,$A:$A0,0))) 来完成,但由于某些查询单元格有多个元素,这对那些元素不起作用。有什么建议吗?

如果您需要保留基因组列中的行,则将基因组列分成 3 列,并在 3 个新列 B、C 和 D 中进行匹配。

=NOT(ISERROR(MATCH(A2,$B:$D0,0)))

编辑:或者您可以尝试使用 VB 宏和正则表达式:

Public Function RegexExecute(str As String, reg As String, _
                             Optional matchIndex As Long, _
                             Optional subMatchIndex As Long) As String
    On Error GoTo ErrHandl
    Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = reg
    regex.Global = Not (matchIndex = 0 And subMatchIndex = 0) 'For efficiency
    If regex.test(str) Then
        Set matches = regex.Execute(str)
        RegexExecute = matches(matchIndex).SubMatches(subMatchIndex)
        Exit Function
    End If
ErrHandl:
    RegexExecute = CVErr(xlErrValue)
End Function

reference

试试 SUMPRODUCTSEARCH:

=IF(SUMPRODUCT(--ISNUMBER(SEARCH(","&$A:$A&",",","&B2&","))),"Y","N")

解释:

我将在示例中解释单元格 C2 的逻辑。

  1. 在第一步中,公式从范围和结果中获取值:

    =IF(SUMPRODUCT(--ISNUMBER(SEARCH({",AA,",",CC,",",EE,",",Gg,"},",AA,BB,"))),"Y","N")

  2. SEARCH 函数 returns 找到字符串的位置数组,如果找不到则出错:

    =IF(SUMPRODUCT(--ISNUMBER({1,#VALUE,#VALUE,#VALUE})),"Y","N")

  3. ISNUMBER returns 布尔数组:

    =IF(SUMPRODUCT(--{TRUE,FALSE,FALSE,FALSE}),"Y","N")

  4. -- 将布尔值转换为整数:

    =IF(SUMPRODUCT({1,0,0,0}),"Y","N")

  5. SUMPRODUCT 总结一下:

    =IF(1,"Y","N")

  6. IF returns TRUE 部分如果第一个参数是非零值。