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

我需要帮助,使“引擎启动”search时没有完全匹配。

在这里输入图像描述

我也想添加两行到顶部添加一个标题,但是当我这样做时,会发生这种情况。

在这里输入图像描述

匹配不会显示前两个结果。 从第三课和第四课开始,应该有引擎的匹配。

当你插入两行时,发生了一些事情导致了转变。

ROW($B$1:$B$1000)成为ROW($B$3:$B$1002) 。 这不是为了返回工作表上的实际行。 它旨在返回由INDEX函数引用的范围内的位置 。 在你的第一个公式,这些是相同的,因为你使用INDEX($A$1:$A$1000, ...但插入两行后,它成为INDEX($A$3:$A$1002, ... ROW($B$3:$B$1002)会返回3将不是1,所以你不可能得到$A$3:$A$1002的第一排$A$3:$A$1002

SMALLfunction的k参数也用于返回一系列连续的数字(例如1,2,3,… )。 原来是ROW(C1) ,它会返回1 ,然后是2,3 …。 这返回最小,然后是第二小,然后是第三小等。插入两行后,这成为行ROW(C3) ,这将返回第三小,并从那里继续。

你的array¹公式固定为反映两个插入行,

 =IFERROR(INDEX($A$3:$A$1002, SMALL(IF($E$3=$B$3:$B$1002, ROW($1:$1000)), ROW(1:1))),"") 

请注意, ROW($1:$1000)INDEX($A$3:$A$1002, ...甚至不反映相同的行, 但行数相同, ROW(1:1)将返回1,2, 3 …因为它被填满,从而返回最小,第二小,第三小等等。

至于你的非精确匹配,你可以用几种方法来应用通配符search。 我通常使用SEARCH²函数进行与ISNUMBER函数配对的通配符search,以处理不匹配的$N/A返回。

 =IFERROR(INDEX($A$3:$A$1002, SMALL(IF(ISNUMBER(SEARCH("*"&$E$3&"*", $B$3:$B$1002)), ROW($1:$1000)), ROW(1:1))),"") 

使用较新的AGGREGATE³function可以不必排列 ¹ input您的公式。

 =IFERROR(INDEX($A$3:$A$1002, AGGREGATE(15, 6, ROW($1:$1000)/ISNUMBER(SEARCH($E$3, $B$3:$B$1002)), ROW(1:1))),"") 

通配符非精确搜索


¹ 数组公式需要使用Ctrl + Shift + Enter 来完成。 一旦正确input第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。

²SEARCH function不区分大小写。 如果需要区分大小写的定位function,请使用FINDfunction 。

Excel 2010引入了AGGREGATE函数 。它在早期版本中不可用。