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

Excel Return multiple partial string matches in array(s)

挑战:

参数:

备注:

演示图片:

在单元格 A2 中(参见问题中的附图),我放置了这个公式:

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

如果有人想 return 他们的结果水平而不是垂直(就像我所做的那样),他们只需将公式的 ROWS(A:A2) 部分更改为 COLUMNS(A:A2) 并拖动横向适当的列数。

此解决方案的最初想法来自 barry houdini as an answer to

这个公式的工作方式是:

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