【问题标题】: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 中存储数据。