2016-12-02 26 views
2

在数据库抽取中,每行都有一个单元格,其中包含逗号分隔的标签列表。我需要一个公式来将这些单元格中的每一个过滤到特定的子集。Google表格/ Excel公式将逗号分隔列表减少为特定子集

我有一个基本的工作版本,但它非常详细。

标签列表在C列中。 我想保留的标签的子集当前位于单独工作表(名为“子集”)上的A1:A10中。

我的基本版本为A1中的每个单元连接相同的子公式A1:A10。每个子公式测试FIND(SubsetTag,TagList)是否返回一个数字,如果是,则输出SubsetTag,后跟“,”以建立包含所有匹配的字符串,例如

=IF(ISNUMBER(FIND(Subset!A$1,C2)),Subset!A$1&", ","") & IF(ISNUMBER(FIND(Subset!A$2,C2)),Subset!A$2&", ","") & IF(ISNUMBER(FIND(Subset!A$3,C2)),Subset!A$3&", ","") & IF(ISNUMBER(FIND(Subset!A$4,C2)),Subset!A$4&", ","") & IF(ISNUMBER(FIND(Subset!A$5,C2)),Subset!A$5&", ","") & IF(ISNUMBER(FIND(Subset!A$6,C2)),Subset!A$6&", ","") & IF(ISNUMBER(FIND(Subset!A$7,C2)),Subset!A$7&", ","") & IF(ISNUMBER(FIND(Subset!A$8,C2)),Subset!A$8&", ","") & IF(ISNUMBER(FIND(Subset!A$9,C2)),Subset!A$9&", ","") & IF(ISNUMBER(FIND(Subset!A$10,C2)),Subset!A$10&", ","") 

有没有一种很好的方法来使用公式来做到这一点? (我想避免脚本)

理想情况下,我想概括公式,所以它不需要更新时,子集增长超出A1:A10,并希望避免尾随逗号:)

回答

1

这里是一个谷歌表格解决方案,使用regexmatch

=join(",", filter(Subset!A1:A10, regexmatch(C2, "\b" & Subset!A1:A10 & "\b"))) 

在范围A1中的组:A10过滤下来的那些的量,串C2形式\btag\b的正则表达式匹配的标签,这意味着C2绝包含标签作为单独的词(\b是词边界)。然后将过滤的数组加入到一个新的逗号分隔字符串中。

如果C2中不包含任何标签,则公式将返回错误消息#N/A。如果您在这种情况下更喜欢空输出,请将公式包装在=iferror()中。

2

可以用阵列式CONCAT()

=LEFT(CONCAT(IF(ISNUMBER(FIND(M8:M10,J8)),M8:N10,"")),LEN(CONCAT(IF(ISNUMBER(FIND(M8:M10,J8)),M8:N10,"")))-2) 

组合要这样做其中:

  • M8:M10是标记列表,
  • N8: N10是字符串“”的列表,
  • J8是您正在搜索的字符串

确保您按控制+ Shift +输入当您完成公式。

LEFT()部分是删除最终的逗号。

相关问题