Excel:从一个可能的值列表中搜索一个单元格是否包含任何值,并返回所有匹配的值(在一个单元格中)

时间:2018-08-07 00:13:12

标签: excel excel-formula

对于我的Excel工作表,我想创建一列,该列从特定值列表中搜索一个单元格并显示其中包含的所有值。

Example of what I want the columns to show

我有一列带有“指令”的列,其中提到了其中的某些文档名称。在另一列中,我想显示从说明列中检测到的所有文档名称。有一个单独的列(未显示),其中包含所有可能的文档的主列表,搜索基于该列表。

目前,我有一个非常长的公式:

=IF(ISNUMBER(SEARCH(Sheet2!F$3, I4)), Sheet2!F$3& CHAR(10), 
 IF(ISNUMBER(SEARCH(Sheet2!F$4, I4)), Sheet2!F$4& CHAR(10),  
 IF(ISNUMBER(SEARCH(Sheet2!F$5, I4)), Sheet2!F$5& CHAR(10),  .... etc. 

最大的问题是,除了非常长且效率低下外,它仅返回值之一(文档名称)。

我也尝试使用:

=SUMPRODUCT(--ISNUMBER(SEARCH(F18:F20, H19)))>0

但这只会返回TRUE / FALSE,而不是所有值。

我希望能够使用文档列的数组进行搜索,并返回“指令”单元格中包含的所有值。

我已经看过关于stackoverflow的多个相关问题,但是我找不到一个能够链接多值搜索(来自数组及其在单元格中的包含)的不同元素,多值返回(在单个单元格)。我当然也不想将值硬编码到公式中,那么您将如何处理呢?

1 个答案:

答案 0 :(得分:0)

使用TEXTJOIN:

=TEXTJOIN(CHAR(10),TRUE,IF(ISNUMBER(SEARCH(Sheet2!F$3:F$10,I4)),Sheet2!F$3:F$10,""))

这是一个数组公式。退出编辑模式时,需要使用Ctrl-Shift-Enter而不是Enter进行确认。

TEXTJOIN是在Office 365 Excel中引入的。


如果没有Office 365 Excel,则可以修改长公式。不要嵌套IF,而是将它们连接起来,并将CHAR(10)放在每个IF之前。像这样:

=MID(IF(ISNUMBER(SEARCH(Sheet2!F$3, I4)), CHAR(10) & Sheet2!F$3,"") &
     IF(ISNUMBER(SEARCH(Sheet2!F$4, I4)), CHAR(10) & Sheet2!F$4,"") &
     IF(ISNUMBER(SEARCH(Sheet2!F$5, I4)), CHAR(10) & Sheet2!F$5,"") & ...,2,999)

...是列表的其余部分。