你可以使用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>
节点,并检查它们的子节点是否包含我们搜索的值。此外,它也像之前一样检查重复项。