【问题标题】:Excel: Search for if a cell contains any of the values from a list of possible values and return all that matched (in a cell)Excel:搜索单元格是否包含可能值列表中的任何值并返回所有匹配的值(在单元格中)
【发布时间】:2018-08-07 00:13:12
【问题描述】:

对于我的 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 的多个相关问题,但我找不到一个能够链接多值搜索的不同元素(来自数组及其在单元格中的包含)、多值返回(在单细胞)。我也绝对不想将这些值硬编码到公式中,那么您将如何处理呢?

【问题讨论】:

  • 您的算法如何工作以在B3 中返回AnalysisA 而不是在B2 中?
  • 嗨,Ron,很好,这是一个错字,AnalysisA 也应该显示在 B2 中!这个例子不是基于公式的(我只是输入了值)。

标签: excel excel-formula


【解决方案1】:

使用 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)。像这样:

=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)

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

【讨论】:

  • 嗨斯科特!非常感谢你的帮助!我对 Excel 不是很熟悉,因此非常感谢您的回答。几个问题:(1)我尝试使用 TEXTJOIN 但它返回“FALSEFALSEFALSE ...等”。它可以返回实际值吗? (2) 我查看了 MID 函数,想知道我们如何确定 start_num 和 num_chars 是什么——这个函数会自动执行吗?当我尝试这个公式时,结果是空白的。再次感谢!
  • 如果结果为空白,则第二个没有匹配项。第一个已修复,因此不会填充 FALSE。 @曼迪
  • 由于我们添加了Char(10) to every one that returns we want to drop the first Char(10) hence starting at character 2. The 999` 假设返回字符串不会大于 999 个字符。 @曼迪
猜你喜欢
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
相关资源
最近更新 更多