具有多个结果和部分匹配的数组公式
Array Formula with Multiple Results and Partial Match
我需要帮助才能使 "Engine Starting" 在搜索时不会完全匹配。
我也想在顶部添加两行以添加一个 header,但是当我这样做时会发生这种情况。
比赛将不会显示前两个结果。从第 3 课和第 4 课开始,引擎应该有匹配项。
当您插入两行时,发生了一些导致移位的事情。
ROW($B:$B00)
变成了ROW($B:$B02)
。这不是为了 return 工作表上的实际行。它旨在 return 位置 INDEX function 引用的范围内。在您的第一个公式中,这些是相同的,因为您使用了 INDEX($A:$A00, ...
,但在插入两行后它变成了 INDEX($A:$A02, ...
。 ROW($B:$B02)
将 return 的最小值将是 3,而不是 1 所以你永远不可能获得 $A:$A02
.
中的第一行
SMALL function 的 k 参数也用于 return 一系列序号(例如 1、2、 3, ...).最初是 ROW(C1)
会 return 1 然后 2, 3, ... 随着公式的填充向下。这 return 编辑了最小的,然后是第二小的,然后是第三小的,等等。插入两行后,这变成了 ROW(C3)
,它将 return 第三小,然后从那里继续。
您的数组¹ 公式已修复以反映插入的两个行,
=IFERROR(INDEX($A:$A02, SMALL(IF($E=$B:$B02, ROW(:00)), ROW(1:1))),"")
请注意 ROW(:00)
和 INDEX($A:$A02, ...
甚至不反映相同的行 但它们是相同的行数 。 ROW(1:1)
将 return 1, 2, 3... 向下填充,从而 return 最小,第二小,第三小,等等
至于您的 non-exact 匹配,您可以通过多种方式应用通配符搜索。我一般用一个SEARCH² function for the wildcard search paired with the ISNUMBER function来对付non-match$N/A
returns.
=IFERROR(INDEX($A:$A02, SMALL(IF(ISNUMBER(SEARCH("*"&$E&"*", $B:$B02)), ROW(:00)), ROW(1:1))),"")
使用较新的 AGGREGATE³ function 可以免除必须 array¹ enter 你的公式。
=IFERROR(INDEX($A:$A02, AGGREGATE(15, 6, ROW(:00)/ISNUMBER(SEARCH($E, $B:$B02)), ROW(1:1))),"")
¹ 数组公式需要用Ctrl+Shift+Enter↵。一旦正确输入第一个单元格,就可以像任何其他公式一样填充或向下或向右复制它们。
²用SEARCH function is not case-sensitive. If a case sensitive locating function is required use the FIND function代替。
³ AGGREGATE function 是在 Excel 2010 中引入的。它在早期版本中不可用。
我需要帮助才能使 "Engine Starting" 在搜索时不会完全匹配。
我也想在顶部添加两行以添加一个 header,但是当我这样做时会发生这种情况。
比赛将不会显示前两个结果。从第 3 课和第 4 课开始,引擎应该有匹配项。
当您插入两行时,发生了一些导致移位的事情。
ROW($B:$B00)
变成了ROW($B:$B02)
。这不是为了 return 工作表上的实际行。它旨在 return 位置 INDEX function 引用的范围内。在您的第一个公式中,这些是相同的,因为您使用了 INDEX($A:$A00, ...
,但在插入两行后它变成了 INDEX($A:$A02, ...
。 ROW($B:$B02)
将 return 的最小值将是 3,而不是 1 所以你永远不可能获得 $A:$A02
.
SMALL function 的 k 参数也用于 return 一系列序号(例如 1、2、 3, ...).最初是 ROW(C1)
会 return 1 然后 2, 3, ... 随着公式的填充向下。这 return 编辑了最小的,然后是第二小的,然后是第三小的,等等。插入两行后,这变成了 ROW(C3)
,它将 return 第三小,然后从那里继续。
您的数组¹ 公式已修复以反映插入的两个行,
=IFERROR(INDEX($A:$A02, SMALL(IF($E=$B:$B02, ROW(:00)), ROW(1:1))),"")
请注意 ROW(:00)
和 INDEX($A:$A02, ...
甚至不反映相同的行 但它们是相同的行数 。 ROW(1:1)
将 return 1, 2, 3... 向下填充,从而 return 最小,第二小,第三小,等等
至于您的 non-exact 匹配,您可以通过多种方式应用通配符搜索。我一般用一个SEARCH² function for the wildcard search paired with the ISNUMBER function来对付non-match$N/A
returns.
=IFERROR(INDEX($A:$A02, SMALL(IF(ISNUMBER(SEARCH("*"&$E&"*", $B:$B02)), ROW(:00)), ROW(1:1))),"")
使用较新的 AGGREGATE³ function 可以免除必须 array¹ enter 你的公式。
=IFERROR(INDEX($A:$A02, AGGREGATE(15, 6, ROW(:00)/ISNUMBER(SEARCH($E, $B:$B02)), ROW(1:1))),"")
¹ 数组公式需要用Ctrl+Shift+Enter↵。一旦正确输入第一个单元格,就可以像任何其他公式一样填充或向下或向右复制它们。
²用SEARCH function is not case-sensitive. If a case sensitive locating function is required use the FIND function代替。
³ AGGREGATE function 是在 Excel 2010 中引入的。它在早期版本中不可用。