【问题标题】:Improve fuzzy match filter in Excel改进 Excel 中的模糊匹配过滤器
【发布时间】:2019-05-02 15:51:36
【问题描述】:

我使用一种模糊匹配过滤器,基于带有过滤器列表的附加列。公式为:

=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 列中的值没有部分匹配,我写“保留”,如果有任何部分匹配,则写“删除”。

:如何写而不是“删除”列 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 翻译工具(在其他情况下为我工作且无错误),我得到以下结果:

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

【问题讨论】:

    标签: excel excel-formula


    【解决方案1】:

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

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

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

    当然,在这种情况下,您可以使用COUNTIF(A2,"*"&B$2:$B$22&"*") 代替--ISNUMBER(...),而不是--ISNUMBER(...)

    【讨论】:

    • 是的,我只有一场比赛。但是您的公式在以另一种方式翻译后在我的德语 Excel 中有效,如屏幕截图所示。我用屏幕截图更新了我的帖子。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 2022-07-27
      相关资源
      最近更新 更多