Excel:删除TEXTJOIN公式的重复结果

3
如何从以下公式的结果中删除所有重复项:
=IF(C2<>"";TEXTJOIN("; ";TRUE;IF(ISNUMBER(SEARCH($C2;$A$2:$A$6));$B$2:$B$6;""));"")

请参考下面图片中的单元格D2作为示例。

example

我的Excel版本没有Unique函数。


你能先让搜索列表变成唯一吗?这样你的函数应该就能正常工作了。 - MGP
你的意思是要手动更改它吗? - Sapman
您可以使用“数据”->“删除重复项”从A列和B列中删除重复项。然后在唯一列表上使用您的函数和搜索列表。 - MGP
那样行不通,每个名称可以有多个数字,有时不同的名称可以有相同的数字。此外,数据是固定的,所以我无法更改它。 - Sapman
1个回答

3

你可以使用FILTERXML函数并使用XPATH表达式返回唯一节点:

=IFERROR(TEXTJOIN(", ",,FILTERXML("<t><s>"&TEXTJOIN("</s><s>",,IF(ISNUMBER(SEARCH($C2,$A$2:$A$6)),$B$2:$B$6,""))&"</s></t>","//s[not(preceding::*=.)]")),"")

在这里,我们检查所有<s>子节点,并在任何前置兄弟节点相同时排除它们。

另一种选择是避免嵌套的IF并让XPATH完成所有工作。如果您有一个合理的列表(不是大规模的),这可能是一个选项:

=IFERROR(TEXTJOIN(", ",,FILTERXML("<x><t>"&TEXTJOIN("</s></t><t>",,B$2:B$6&"<s>"&A$2:A$6)&"</s></t></x>","//t[.//*[contains(.,'"&C2&"')]][not(preceding::*=.)]")),"")

在这里,我们检查所有的<t>节点,并检查它们的子节点是否包含我们搜索的值。此外,它也像之前一样检查重复项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接