Excel Return 数组中的多个部分字符串匹配
Excel Return multiple partial string matches in array(s)
挑战:
- 要有一个公式(很可能是一个数组公式),它将 return 多个 部分 匹配来自 column/row.
参数:
- 不能使用
INDIRECT
,因为它不可扩展,如果移动或插入数据会中断
- 公式必须可以轻松扩展(即:将角拖动到需要扩展的方向以显示下一个部分匹配项)
备注:
- 不幸的是,
INDEX
/MATCH
函数组合不适用于部分字符串匹配
- 我有一个基于其他人工作的解决方案,我将其放在下面,但我也很好奇是否有我没有看到的更优雅的解决方案。我非常感谢其他人的反馈
演示图片:
在单元格 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 。
这个公式的工作方式是:
- 评估搜索词框(本例中的
E2
)是否为空,如果是,它也会将结果单元格保持为空。本例不为空,开始计算
- 接下来它使用
SEARCH
函数搜索我们的搜索词(本例为 "ke")。它 return 是一组错误消息和(对于任何匹配项)它们在网格中的位置编号。
- 接下来,使用
ISNUMBER
函数,它根据 SEARCH
returned 将数组中的值转换为 "FALSE" 和 "TRUE"在上一步中。在我们的示例中,此单元格将在数组的第三个位置 returning 一个 "TRUE"。
- 由于我们的
IF
函数中有一个 "TRUE" 响应,我们现在将评估数组中该特定点的 return 内容。 ROW(A:A)-ROW(A)+1
部分根据我们的数组起始位置将我们数组的所有绝对行值转换为相对值。
- 在我们的
SMALL
函数中,我们现在有一个包含 "FALSE" 和匹配项的任何相对位置(在本例中为“3”)的数组。
- 下一个评估步骤是我们公式末尾的 "nth counter"。因为我们处于输出第一个结果的位置 (
A2
),所以它将 return 数字“1”。
- 我们的
SMALL
函数求值,returns第一个最小的结果("FALSE"被淘汰,returned的数是第5步的3) .
- 我们的
INDEX
函数现在计算 return 数组 A:A
第三个位置的单元格,即 "Mickey Mouse".
挑战:
- 要有一个公式(很可能是一个数组公式),它将 return 多个 部分 匹配来自 column/row.
参数:
- 不能使用
INDIRECT
,因为它不可扩展,如果移动或插入数据会中断 - 公式必须可以轻松扩展(即:将角拖动到需要扩展的方向以显示下一个部分匹配项)
备注:
- 不幸的是,
INDEX
/MATCH
函数组合不适用于部分字符串匹配 - 我有一个基于其他人工作的解决方案,我将其放在下面,但我也很好奇是否有我没有看到的更优雅的解决方案。我非常感谢其他人的反馈
演示图片:
在单元格 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
这个公式的工作方式是:
- 评估搜索词框(本例中的
E2
)是否为空,如果是,它也会将结果单元格保持为空。本例不为空,开始计算 - 接下来它使用
SEARCH
函数搜索我们的搜索词(本例为 "ke")。它 return 是一组错误消息和(对于任何匹配项)它们在网格中的位置编号。 - 接下来,使用
ISNUMBER
函数,它根据SEARCH
returned 将数组中的值转换为 "FALSE" 和 "TRUE"在上一步中。在我们的示例中,此单元格将在数组的第三个位置 returning 一个 "TRUE"。 - 由于我们的
IF
函数中有一个 "TRUE" 响应,我们现在将评估数组中该特定点的 return 内容。ROW(A:A)-ROW(A)+1
部分根据我们的数组起始位置将我们数组的所有绝对行值转换为相对值。 - 在我们的
SMALL
函数中,我们现在有一个包含 "FALSE" 和匹配项的任何相对位置(在本例中为“3”)的数组。 - 下一个评估步骤是我们公式末尾的 "nth counter"。因为我们处于输出第一个结果的位置 (
A2
),所以它将 return 数字“1”。 - 我们的
SMALL
函数求值,returns第一个最小的结果("FALSE"被淘汰,returned的数是第5步的3) . - 我们的
INDEX
函数现在计算 return 数组A:A
第三个位置的单元格,即 "Mickey Mouse".