在Excel中改进模糊匹配过滤器

时间:2019-05-02 15:51:36

标签: excel excel-formula

我使用一种模糊匹配过滤器,它基于带有过滤器列表的其他列。公式是:

=IF(SUMPRODUCT(COUNTIF(A2,"*"&B$2:$B$22&"*"))>0,"Delete","Keep")

实际上有两个公式,它们的作用方式相同-它们是在实验中创建的。第二个是:

=IF(SUMPRODUCT(--ISNUMBER(SEARCH($B$2:$B$22,A2))),"Delete","Keep")
  • A列包含要过滤的数据,
  • 列B(从B2到B22)包含过滤器列表
  • 在C列中,如果A列中的值与B列中的值不存在部分匹配,请写“ keep”,如果有部分匹配,则写“ delete”。

Q :如何编写而不是“删除” B列中的匹配值?我无法在两个公式中都完成这项工作。

更新 @Jerry翻译公式后

=IFERROR(INDEX($B$2:$B$22,MATCH(9^99,SEARCH($B$2:$B$52,A2))),"Keep")

=WENNFEHLER(INDEX($B$2:$B$22;VERGLEICH(9^99;SUCHEN($B$2:$B$52;A2)));"Keep")

使用this翻译工具(在其他情况下为我工作,没有错误),我得到以下结果:

enter image description here

这是另一个,而不是杰里的结果。

2 个答案:

答案 0 :(得分:1)

如果只有1个匹配项,则可以在数组公式中使用INDEXMATCH(使用 Ctrl + Shift + 输入,如果操作正确,则会在公式栏中看到公式周围的卷曲括号):

=IFERROR(INDEX($B$2:$B$22,MATCH(9^99,SEARCH($B$2:$B$22,A2))),"Keep")

enter image description here

如果有多个匹配项,则将使用上述公式获得最后一个匹配项。如果您希望在这种情况下返回第一个公式,则必须在搜索函数周围使用--ISNUMBER,将MATCH的第一个参数使用1并使用完全匹配(即使用{{1} } / 0作为FALSE的第三个参数。

当然,在这种情况下,您可以对公式的内部部分使用MATCH而不是COUNTIF(A2,"*"&B$2:$B$22&"*")

答案 1 :(得分:0)

对于所有感兴趣的人:这个公式可以解决问题:

=IFERROR(LOOKUP(9.99E+307,SEARCH(B$2:B$22,A2),B$2:B$22),"Keep")