【问题标题】:Excel matching multiple partial valuesExcel匹配多个部分值
【发布时间】:2019-09-12 14:36:29
【问题描述】:

我发布了一张示例图片,展示了我想要实现的目标。我想匹配 A 行中 D 行的部分值。当有匹配时,它应该返回 D 中的值。我有可以有多个部分匹配的单词(例如,“summer dress”和“dress”都是部分匹配的对于“XXL 夏装”)我想我应该将 D 行从大多数角色排到最少,以获得最佳匹配。

通常我会使用多个 IF 函数,但在我的文件中,A 列包含 30.000 个值,而 D 行中有 300 个值,这使得我猜这个公式太大了。

对于这些数量的值,是否可以获得如图所示的结果?

我已经尝试过 VLOOKUP / INDEX & MATCH 和一些宏,但似乎都没有返回我想要的值。

【问题讨论】:

    标签: excel-formula excel-2010


    【解决方案1】:

    使用索引/聚合:

    =INDEX(D:D,AGGREGATE(15,7,ROW($D$3:$D$6)/(ISNUMBER(SEARCH($D$3:$D$6,A3))),1))
    

    这将遍历$D$3:$D$6 中的值以查看它们是否存在于较长的字符串中,然后如果找到匹配项则返回。如果找不到匹配项,则会返回错误。

    【讨论】:

      【解决方案2】:

      MATCH 接受通配符(用于部分匹配)。您可以在显示的工作表的单元格B11 中尝试此公式(并向下拖动/填写)。

      =INDEX(A$11:A$14,AGGREGATE(15,6,MATCH("*"&$D$11:$D$14&"*",$A11,0)*(ROW($D$11:$D$14)-ROW(D$11)+1),1))
      

      所以:

      • MATCH 用于检查Word 是否部分匹配Categories* 通配符将匹配任何字符(包括“无字符”)。它应该返回一个数组 #N/A 用于不匹配,1 用于匹配。
      • ROW 用于创建对应的从 1 开始的等长数组。
      • 在没有FILTER 函数的情况下,AGGREGATE 基本上用于过滤/排除所有错误。 15 表示只返回第一个匹配的Category
      • INDEX 用于检索适当的 Category 并完成查找。

      如果性能确实是个问题,您可能需要考虑关闭自动重新计算,或者使用 VBA 例程,或者不在 Excel 中存储数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多