如何在Google表格中使用公式创buildexplode(),implode()模式匹配方法的等价物?

这是我的目标:

我有以下数据集:

在这里输入图像描述

从那里,我想要产生以下内容:

类别结果集

为了RTFM的利益,这是我的思考过程和我所尝试的:

首先,顶层集合的两列分别位于各自的命名范围中:Color_Abbrevs,Category_Names。

我知道我可以使用JOIN()从类别名称的类别输出中产生结果,如下所示:

JOIN("/",Category_Names)

我现在的挑战是如何创build一种“模式匹配器”(我不知道还有什么叫它),我可以使用缩写代替类别名称来呈现结果string。 A8:A10中显示了所需格式的一个例子。

首先,我试图通过使用像INDEX和MATCH方法的想法:

=INDEX(Category_Names,MATCH(LEFT(A8,FIND("/",A8)-1),Category_Abbrevs,0))

这在A9中产生了正确的值,所以我想我可能会走在正确的轨道上。 我坚持的部分是如何将JOIN和INDEX和MATCH公式连接在一起,以允许可变长度的缩写和类别。

理想情况下,我希望能够继续向顶层数据集添加值,并通过第二个数据集在列表中定义我需要的任何唯一的“模式”,以获得期望的结果。

这是可能的使用公式,还是我需要编写一些谷歌脚本来实现它?

编辑:行B8和B9都有错别字(道歉)。 B8应显示“瓷砖日用品/瓷器”,B9应显示“瓷砖店/金属瓷器”。

或者,您也可以使用公式(在B8):

 =ARRAYFORMULA(JOIN("/";LOOKUP(SPLIT(A8;"/");$A$2:$A$6;$B$2:$B$6))) 

在Google表格中以相似的顺序获取“类别输出”,就像在“结构”

编辑

看起来我错过了这里的东西:P

 =ARRAYFORMULA(JOIN("/";VLOOKUP(SPLIT(A8;"/";TRUE);$A$2:$B$6;2;FALSE()))) 

如果一切都在列表中(如果没有find,它将完全错误)

 =ARRAYFORMULA(JOIN("/";IFERROR(VLOOKUP(SPLIT(A8;"/";TRUE);$A$2:$B$6;2;FALSE());"---"))) 

这将显示“—”为每个没有被发现的部分…

在Google表格中使用以下公式:

 =JOIN("/",filter($B$1:$B$6,ISNUMBER(SEARCH($A$1:$A$6,A8)))) 

在这里输入图像描述


在Excel中,Excel在Office 365中引入了TEXTJOIN()函数,我们可以在数组公式中使用这个函数:

 =TEXTJOIN("/",TRUE,IF(ISNUMBER(SEARCH($A$1:$A$6,A8)),$B$1:$B$6,"")) 

作为excel中的数组,在退出编辑模式而不是Enter时,必须使用Ctrl-Shift-Enter。 如果正确完成,则Excel将在公式周围放置{}

在这里输入图像说明


注意

这两种方法都将按照search区域的顺序输出输出,而不是按照标准单元中的顺序输出。