如何使用公式在Google表格中创建一个explode(),implode()模式匹配方法的等效方法?

时间:2016-06-25 17:29:14

标签: excel google-sheets

这是我的目标:

我有以下数据集:

enter image description here

由此,我想生成以下内容:

Category Result Set

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

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

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

JOIN("/",Category_Names)

我现在的挑战是如何创建一种"模式匹配器" (我不知道还有什么可以称之为)我可以使用缩写代替类别名来呈现结果字符串。所需模式格式的一个例子显示在A8:A10中。

首先,我尝试使用INDEX和MATCH方法进行思考:

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

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

理想情况下,我希望能够继续向顶级数据集添加值,并定义任何独特的"模式"我需要通过第二个数据集在列表中获得所需的结果。

这是否可以使用公式,或者我是否需要编写一些Google脚本来实现它?

编辑:B8和B9行都有拼写错误(道歉)。 B8应该显示" Tile Daily Store / Porcelain"和B9应该显示" Tile Depot Store / Metallic Porcelain"。

2 个答案:

答案 0 :(得分:2)

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

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

enter image description here

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

{}

作为excel中的数组必须在退出编辑模式而不是Enter时使用Ctrl-Shift-Enter。如果操作正确,那么Excel会将 <div class="social"> <ul> <li> <a href="#"> <img src="assets/Android.png" alt="Smiley face" height="42" width="42"> </a> </li> <li> <a href="#"> <img src="assets/GitHub.png" alt="Smiley face" height="42" width="42"> </a> </li> <li> <a href="#"> <img src="assets/GooglePlus.png" alt="Smiley face" height="42" width="42"> </a> </li> <li> <a href="#"> <img src="assets/LinkedIn.png" alt="Smiley face" height="42" width="42"> </a> </li> <li> <a href="#"> <img src="assets/Mail.png" alt="Smiley face" height="42" width="42"> </a> </li> <li> <a href="#"> <img src="assets/Reddit.png" alt="Smiley face" height="42" width="42"> </a> </li> <li> <a href="#"> <img src="assets/YouTube.png" alt="Smiley face" height="42" width="42"> </a> </li> </ul> </div> 放在公式周围。

enter image description here

注意

这两种方法都会按照搜索区域的顺序排列输出,而不是标准单元格中的顺序。

答案 1 :(得分:1)

或者你也可以使用公式(在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())))

如果列表中也包含所有内容(如果找不到内容,则会完全错误)

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

这将显示未找到的每个部分的“---”......