如何在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区域的顺序输出输出,而不是按照标准单元中的顺序输出。