给定包含多个分隔值的单元格,在不同的表中查找多个值

Luc*_*cio 1 lookup worksheet-function microsoft-excel

我有两个表,看起来像这样:

在此处输入图片说明

我希望 Excel 使用ID company associated表 2(绿色)中的值,在表 1(橙色)中查找它并返回来自 的值Company name,或者当多个公司与表 2 中的同一个人相关联时返回多个值。

最好的解决方案是什么?

rob*_*CTS 5

这是一个适用于 Excel 2016 的公式。在早期版本的 Excel 中,需要一个 poly-fill UDF TEXTJOIN()。(有关基本信息,请参阅此帖子。)


工作表截图

数组输入 ( Ctrl+ Shift+ Enter) 以下公式F2并复制粘贴/向下填充到列的其余部分:

{=TEXTJOIN(";",TRUE,INDEX(B:B,N(IF(1,MATCH(--MID(SUBSTITUTE(E2,";",REPT(" ",99)),(ROW(OFFSET($A$1,,,LEN(E2)-LEN(SUBSTITUTE(E2,";",""))+1))-1)*99+((ROW(OFFSET($A$1,,,LEN(E2)-LEN(SUBSTITUTE(E2,";",""))+1)))=1),99),A:A,0)))))}
Run Code Online (Sandbox Code Playgroud)

请注意,此公式仅在列A中的值实际存储为数字时才有效。对于文本值,--MID(…)公式中的 需要替换为TRIM(MID(…))


美化后的公式如下:

{=
  TEXTJOIN(
  ";",
  TRUE,
  INDEX(
    (B:B),
    N(IF(1,
      MATCH(
        --MID(
          SUBSTITUTE(E2,";",REPT(" ",99)),
          99*(ROW(OFFSET($A$1,,,LEN(E2)-LEN(SUBSTITUTE(E2,";",""))+1))-1)
          +(1=ROW(OFFSET($A$1,,,LEN(E2)-LEN(SUBSTITUTE(E2,";",""))+1))),
          99
        ),
        (A:A),
        0
      )
    ))
  )
)}
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 如果输入,美化的公式实际上有效。
  • (A:A)美化版本中的括号需要强制A:A保持在自己的行上。这同样适用于(B:B).


对于 Excel 2016(仅限 Windows),以下更简单的公式应该有效:

{=TEXTJOIN(";",TRUE,INDEX(B:B,N(IF(1,MATCH(--FILTERXML("<a><b>" & SUBSTITUTE(E2, ";", "</b><b>") & "</b></a>", "//b"),A:A,0)))))}
Run Code Online (Sandbox Code Playgroud)

就像前面的公式一样,这个公式也只适用于存储为数字的值。对于文本值,只需--从公式中删除。