Excel返回数组中的多个部分字符串匹配

时间:2018-09-05 22:02:07

标签: excel excel-formula string-matching

挑战:

  • 要有一个公式(很可能是数组公式),该公式将从一列/行中返回多个 partial 匹配项。

参数:

  • 不能使用INDIRECT,因为它不可扩展,并且如果移动或插入数据会损坏
  • 公式必须以最小的努力即可扩展(即:将角拖动到您需要扩展的方向以显示下一个部分匹配项)

注意:

  • 不幸的是,INDEX / MATCH函数组合不适用于部分字符串匹配
  • 我有一个基于其他人工作的解决方案,我将在下面介绍,但是我也很好奇是否有一个我看不到的更优雅的解决方案。非常感谢其他人的反馈

演示图片:

An example of what we are trying to accomplish

1 个答案:

答案 0 :(得分:1)

在单元格A2中(请参见问题的所附图片),我放置了以下公式:

=IF($E$2="","",IFERROR(INDEX(A$7:A$28,SMALL(IF(ISNUMBER(SEARCH($E$2,A$7:A$28)),ROW(A$7:A$28)-ROW(A$7)+1),ROWS(A$2:A2))),"")),然后按 CTRL + SHIFT + ENTER ,以公式形式输入数组公式。最后,将此公式向下拖动到A5,然后将A2:A5拖动到C列。

如果某人想要水平而不是垂直返回结果(如我所做的那样),则只需将公式的ROWS(A$2:A2)部分更改为COLUMNS(A$2:A2)并向侧面拖动适当数量的列

此解决方案的原始想法来自barry houdini,是对this question的回答。

此公式的工作方式为:

  1. 计算搜索词框(在此示例中为E2)是否为空白,如果为空白,则结果单元格也保持空白。在此示例中,它不是空白,并且开始计算。
  2. 接下来,它使用SEARCH函数搜索我们的搜索词(在此示例中为“ ke”)。它返回一个错误消息数组和(如果有任何匹配项)它们在网格中的位置编号。
  3. 接下来,使用ISNUMBER函数,根据SEARCH在上一步中返回的内容,将数组中的值转换为“ FALSE”和“ TRUE”。在我们的示例中,此单元格将在数组的第三位置返回“ TRUE”。
  4. 由于我们的IF函数具有“ TRUE”响应,因此我们现在将评估该数组中该特定点的返回值。 ROW(A$7:A$28)-ROW(A$7)+1部分根据数组的起始位置将数组的所有绝对行值转换为相对值。
  5. SMALL函数中,我们现在有了一个数组,其中包含“ FALSE”和匹配项的任何相对位置(在此示例中为“ 3”)。
  6. 下一个评估步骤是公式末尾的“第n个计数器”。因为我们处于输出第一个结果(A2)的位置,所以它将返回数字“ 1”。
  7. 我们的SMALL函数求值,并返回第一个最小的结果(“ FALSE”被消除,返回的数字是步骤5中的3)。
  8. 我们的INDEX函数现在求值,并返回数组A$7:A$28的第三位置的单元格,即“米老鼠”。