在 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
试试 SUMPRODUCT
和 SEARCH
:
=IF(SUMPRODUCT(--ISNUMBER(SEARCH(","&$A:$A&",",","&B2&","))),"Y","N")
解释:
我将在示例中解释单元格 C2
的逻辑。
在第一步中,公式从范围和结果中获取值:
=IF(SUMPRODUCT(--ISNUMBER(SEARCH({",AA,",",CC,",",EE,",",Gg,"},",AA,BB,"))),"Y","N")
SEARCH
函数 returns 找到字符串的位置数组,如果找不到则出错:
=IF(SUMPRODUCT(--ISNUMBER({1,#VALUE,#VALUE,#VALUE})),"Y","N")
ISNUMBER
returns 布尔数组:
=IF(SUMPRODUCT(--{TRUE,FALSE,FALSE,FALSE}),"Y","N")
--
将布尔值转换为整数:
=IF(SUMPRODUCT({1,0,0,0}),"Y","N")
SUMPRODUCT
总结一下:
=IF(1,"Y","N")
IF
returns TRUE
部分如果第一个参数是非零值。
我有一列包含特殊基因组的列表。还有另一列基因组,其中一些细胞有多个条目,以逗号分隔。我想要的是检查第二列的每个单元格是否是第一列中的任何条目。如果第二列中的单元格只有一个元素,我可以用 =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
试试 SUMPRODUCT
和 SEARCH
:
=IF(SUMPRODUCT(--ISNUMBER(SEARCH(","&$A:$A&",",","&B2&","))),"Y","N")
解释:
我将在示例中解释单元格 C2
的逻辑。
在第一步中,公式从范围和结果中获取值:
=IF(SUMPRODUCT(--ISNUMBER(SEARCH({",AA,",",CC,",",EE,",",Gg,"},",AA,BB,"))),"Y","N")
SEARCH
函数 returns 找到字符串的位置数组,如果找不到则出错:=IF(SUMPRODUCT(--ISNUMBER({1,#VALUE,#VALUE,#VALUE})),"Y","N")
ISNUMBER
returns 布尔数组:=IF(SUMPRODUCT(--{TRUE,FALSE,FALSE,FALSE}),"Y","N")
--
将布尔值转换为整数:=IF(SUMPRODUCT({1,0,0,0}),"Y","N")
SUMPRODUCT
总结一下:=IF(1,"Y","N")
IF
returnsTRUE
部分如果第一个参数是非零值。