对于我的Excel工作表,我想创建一列,该列从特定值列表中搜索一个单元格并显示其中包含的所有值。
我有一列带有“指令”的列,其中提到了其中的某些文档名称。在另一列中,我想显示从说明列中检测到的所有文档名称。有一个单独的列(未显示),其中包含所有可能的文档的主列表,搜索基于该列表。
目前,我有一个非常长的公式:
=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的多个相关问题,但是我找不到一个能够链接多值搜索(来自数组及其在单元格中的包含)的不同元素,多值返回(在单个单元格)。我当然也不想将值硬编码到公式中,那么您将如何处理呢?
答案 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)
...
是列表的其余部分。