【问题标题】:How To Return Multiple Match Values from A Cell That Contains A Word/Text in Excel如何从包含 Excel 中的单词/文本的单元格返回多个匹配值
【发布时间】:2019-02-15 17:50:56
【问题描述】:

我有一堆由身份证号和姓名组成的数据。

图片 1

{=IF(ISERROR(INDEX($A$2:$B$12;SMALL(IF($A$1:$A$16=$E$1;ROW($A$1:$A$12));ROW(1:1));2));"";INDEX($A$1:$B$12;SMALL(IF($A$1:$A$16=$E$1;ROW($A$1:$A$12));ROW(1:1));2))}

以前(图 1)我成功地能够从仅包含一个名称的列名称中返回具有名称值的多个值。我正在使用索引函数数组公式来解决这个问题。

但是,当我在该名称列中有多个名称时,我被卡住了。我想要做的是在不修改该列的情况下返回多个 Id Number 值,其中包含多个名称,在 Names 列中用“逗号”分隔。预期结果如图 2 所示。

图片 2

问题是:

  1. 我想根据 Names 从 ID Number 列中获取值 包含名称的列
  2. 我想自动获取多个值,就像显示在 图 1
  3. 如果有两个 ID Number 值相同,则将其删除或不显示在结果中。

我不介意你们对我采取的任何方法。我将感谢您提供的任何解决方案。非常感谢。

【问题讨论】:

  • 您需要使用Find() 公式在单元格中查找匹配项,而不是使用Index() 来查找匹配项,而不是匹配完整的单元格。要检查是否存在匹配项,您可以查看 Find() 产生的结果是否大于 0。
  • 为什么John 只匹配1a232 而它也出现在其他行中?
  • 而 Marrie 的 ID 应该只出现一次,因为她重复的是同一个号码?
  • 我编辑了图片2。谢谢你提醒我。

标签: excel indexing match vlookup


【解决方案1】:

你可以使用

=IFERROR(INDEX($A:$A,SMALL(IF(ISNUMBER(FIND(E$1,$B$2:$B$11))*(COUNTIF(E$1:E1,$A$2:$A$11)=0),ROW($B$2:$B$11)),1)),"")

使用CtrlShiftEnter

作为数组公式输入

=IFERROR(INDEX($A:$A,AGGREGATE(15,6,ROW($B$2:$B$11)/(ISNUMBER(FIND(E$1,$B$2:$B$11))*(COUNTIF(E$1:E1,$A$2:$A$11)=0)),1)),"")

正常进入。

编辑

@Ron Rosenfeld 是绝对正确的,他们的公式将匹配(例如)Jo 和 John,尽管由于他们使用区分大小写的 find 并在每个名字的开头(所以 Ange 不会匹配 Hanger)。

修改后的公式是

=IFERROR(INDEX($A:$A,SMALL(IF(ISNUMBER(FIND(","&E$1&",",","&$B$2:$B$11&","))*(COUNTIF(E$1:E1,$A$2:$A$11)=0),ROW($B$2:$B$11)),1)),"")

=IFERROR(INDEX($A:$A,AGGREGATE(15,6,ROW($B$2:$B$11)/(ISNUMBER(FIND(","&E$1&",",","&$B$2:$B$11&","))*(COUNTIF(E$1:E1,$A$2:$A$11)=0)),1)),"")

【讨论】:

  • 我建议在find_textwithin_text 中添加一个逗号,以避免names within names 的问题。例如find(e1&",", b2:b11 & ",")
  • 非常感谢@Tom Sharpe 先生,它工作得非常好。我应该更多地了解excel。 :)
  • 感谢您的建议@Ron Rosenfeld - 请参阅编辑。
猜你喜欢
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多