【问题标题】:Array Formula with Multiple Results and Partial Match具有多个结果和部分匹配的数组公式
【发布时间】:2015-09-24 16:47:02
【问题描述】:

我需要帮助,以便“引擎启动”在搜索时不会完全匹配。

  

我还想在顶部添加两行以添加标题,但是当我这样做时会发生这种情况。

  

比赛不会显示前两个结果。从第 3 课和第 4 课开始,应该有一个引擎匹配。

【问题讨论】:

  • 可以上传excel文件吗?仅从图像很难看出您的要求。
  • 你应该修改你的问题。我是根据我刚刚下载的 excel 文件发表的评论。您通过在顶部添加两行所做的正是 excel 文本框要求您执行的操作。 [来自excel表格]“1.在顶部添加两行并放置标题和TCO的修订号”
  • 另一条评论基于下载的excel。看起来您有几张似乎是课程计划和课程标题的表格。你的任务是搜索“引擎启动”这个词并创建一个包含这些词的课程列表。这是正确的吗?
  • 如果我之前的评论是正确的,只需使用“Crtl+F”搜索“引擎启动:”这是一个 imgur 示例。 i.imgur.com/NCCTQTy.png>。有不同的选项,当前搜索仅在此工作表内。但您也可以包含其他工作表。

标签: excel indexing match


【解决方案1】:

当您插入两行时,发生了几件事导致了这种转变。

ROW($B$1:$B$1000) 变成了ROW($B$3:$B$1002)。这不是为了返回工作表上的实际行。它旨在返回INDEX function 引用的范围内的位置。在您的第一个公式中,这些是相同的,因为您使用了INDEX($A$1:$A$1000, ...,但在插入两行后它变成了INDEX($A$3:$A$1002, ...ROW($B$3:$B$1002) 将返回的最小值将是 3,而不是 1,因此您永远无法获得 $A$3:$A$1002 中的第一行。

SMALL functionk 参数也用于返回一系列连续数字(例如 1、2、3、...)。它最初是 ROW(C1),它会返回 1,然后返回 2, 3, ...,因为公式已填写完毕。这将返回最小的然后是第二小的然后是第三小的,等等。插入两行后,这变成了ROW(C3),它将返回第三小的并从那里继续。

您的数组¹公式已固定以反映插入的两个行,

=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² function 进行通配符搜索,搭配ISNUMBER function 来处理不匹配的$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 可以省去数组¹ 输入您的公式。

=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↵ 完成。一旦正确输入第一个单元格,它们就可以像任何其他公式一样被填充或向下或向右复制。

² SEARCH function 不区分大小写。如果需要区分大小写的定位功能,请改用FIND function

³AGGREGATE function 是随 Excel 2010 引入的。它在早期版本中不可用。

【讨论】:

  • 非常感谢,完美回答了我的问题。唯一的问题是部分搜索有效,但只显示第一个结果。有没有办法使用聚合函数但仍然显示多个结果?
  • 我不清楚问题是什么。请参阅this
猜你喜欢
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 2020-06-23
  • 1970-01-01
  • 2016-03-11
相关资源
最近更新 更多