具有多个结果和部分匹配的数组公式

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 functionk 参数也用于 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/Areturns.

=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 中引入的。它在早期版本中不可用。