【问题标题】:How to match comma separated list then use index to get comma separated result in excel如何匹配逗号分隔的列表然后使用索引在excel中获取逗号分隔的结果
【发布时间】:2021-04-26 21:58:02
【问题描述】:

我有查表:

A B
A Apple
B Banana

我的列是

A
A
A,B
B

我喜欢结果显示为

A B
A Apple
A,B Apple, Banana
B Banana

【问题讨论】:

  • 有点不清楚你在问什么。也许提供屏幕截图或表格数据会有所帮助。
  • 如果您没有 Office 365,可以使用 Power Query 或 VBA 执行此操作。请注明您的 Excel 版本以及是否有TEXTJOIN 功能。

标签: excel indexing match vlookup


【解决方案1】:

要使用公式执行此操作,必须具有 Office365 和 Excel 2019 中可用的 TEXTJOIN。

=TEXTJOIN(", ",TRUE,VLOOKUP(FILTERXML("<a><b>"&SUBSTITUTE(D1,",","</b><b>")&"</b></a>","//b"),A:B,2,FALSE))

如果没有 TEXTJOIN,则需要 vba 或许多辅助列。

使用 vba 可以创建一个 TEXTJOIN 外观。一个见HERE

我们还需要转移到 INDEX MATCH:

=TEXTJOIN(", ",TRUE,INDEX(B:B,N(IF({1},MATCH(FILTERXML("<a><b>"&SUBSTITUTE(D1,",","</b><b>")&"</b></a>","//b"),A:A,0)))))

这需要在退出编辑模式时使用 Ctrl-Shift-Enter 而不是 Enter 来确认。

【讨论】:

  • 只有excel 2016,尝试使用TEXTJOIN函数,但还是不知道如何得到最终结果,值报错
  • 非常感谢,斯科特,它成功了。您能否解释一下 N, IF({1}...) 部分?当我只对A,B本身使用FilterXML时,它只返回A,那么它是如何返回一个数组的呢?
  • filterxml 返回一个数组,但如果你只把它放在一个单元格中,它只会返回第一个。一个单元格不能容纳一个数组。 N(IF({1}...)) 是一个小漏洞,强制 INDEX 接受返回的数字数组。在旧版本中,INDEX 自然不会接受数组。
  • 另外,请考虑通过单击答案旁边的复选标记将其标记为正确。
猜你喜欢
  • 1970-01-01
  • 2013-07-03
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 2010-10-14
相关资源
最近更新 更多