Excel 匹配多个部分值

Excel matching multiple partial values

我发布了一张示例图片,展示了我想要实现的目标。我想匹配 A 行中 D 行的部分值。当有匹配时,它应该 return 来自 D 的值。我有可以有多个部分匹配的单词(例如 'summer dress' 和 'dress' 都是 'XXL Summer dress') 的部分匹配)我想我会从大多数字符到最少的顺序排列 D 行以获得最佳匹配。

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

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

我试过 VLOOKUP / INDEX & MATCH 和一些宏,但 none 似乎 return 我想要的值。

使用INDEX/AGGREGATE:

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

这将遍历 $D:$D 中的值以查看它们是否存在于较长的字符串中,如果找到匹配项,它将 return。如果找不到匹配项,它将 return 出错。

MATCH 接受通配符(用于部分匹配)。您可以在显示的工作表的单元格 B11 中尝试此公式(以及 drag/fill 下方)。

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

所以:

  • MATCH 用于检查 Word 是否部分匹配任何 Categories* 通配符将匹配任何字符(包括 "no character")。它应该 return 一个 #N/A 的数组用于不匹配和 1 用于匹配。
  • ROW用于创建对应的从1开始的等长数组
  • 在没有FILTER函数的情况下,AGGREGATE基本上用于filter/exclude所有错误。 15 意味着只有第一个匹配的 Category 是 returned.
  • INDEX用于检索合适的Category并完成查找。

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