大家好,今天我们来复习一个老案例,看看怎么将比较冗长的公式尽量缩短一些。想必大家都有一定的思路。

  如下图所示:

  A列每个单元格中都包含用分隔符逗号连接的若干个水果名称,我们想要进行一次筛选提取,将单元格字符串中包含带“瓜”字的水果单独提取出来,放置到B列对应的位置。

  用let简化公式:分隔符连接的水果名称,只筛选带"瓜"字的水果

  小编给到的解决方案是:

  TEXTJOIN+LET+TEXTSPLIT+FILTER+REGEXP

  TEXTSPLIT→FILTER→TEXTJOIN这一部分思路非常顺畅,逻辑清晰,符合"拆分-过滤-合并"的直观思维。

  REGEXP是专门的正则表达式函数,比FIND或SEARCH更强大,可以比较容易的进行提取、判断、替换。

  使用LET函数将拆分结果命名为变量a,避免重复使用TEXTSPLIT进行计算,提升了统计效率。

  虽然其中会涉及到5个函数,但是由于LET函数的加持,使公式的整体长度不会很长,且可读性更佳。

  下面我们来整体看一下工作原理!

  第一步

  名称拆分

  借助TEXTSPLIT函数强大的拆分性能:

  =TEXTSPLIT(A2,,",")

  可以将A列单元格中以逗号间隔开的水果名称拆分到一列多行显示。

  用let简化公式:分隔符连接的水果名称,只筛选带"瓜"字的水果

  第二步

  判断名称

  借助REGEXP函数强大的判断模式:

  =REGEXP(TEXTSPLIT(A2,,","),"瓜",1)

  判断上一步拆分出来的一列多行(数组)的各个元素水果名称中是否包含关键字“瓜”。如果包含这个字,那么就会返回判断结果TRUE(真值),相反如果不包含这个字,就会返回判断结果FALSE(假值)。

  用let简化公式:分隔符连接的水果名称,只筛选带"瓜"字的水果

  第三步

  筛选名称

  我们利用FILTER的强大的条件筛选功能:

  =FILTER(TEXTSPLIT(A2,,","),REGEXP(TEXTSPLIT(A2,,","),"瓜",1))

  在TEXTSPLIT(A2,,",")(第1参数)这个分行后的一列多行的水果名称数组区域中进行整体筛选。且只有当这个一列多行的水果名称数组区域中含有关键字“瓜”的时候(第2参数),我们才会将包含“瓜”字的所有水果名称筛选出来显示。

  用let简化公式:分隔符连接的水果名称,只筛选带"瓜"字的水果

  第四步

  带入变量简化公式

  因为在上一步公式中:

  FILTER(TEXTSPLIT(A2,,","),REGEXP(TEXTSPLIT(A2,,","),"瓜",1))

  TEXTSPLIT(A2,,",")这一部分出现被引用了2次,为了使其不重复出现,减少公式长度,可以令这一步部分用变量参数a表示。

  可以用LET函数设置变量参数:

  =LET(a,TEXTSPLIT(A2,,","),FILTER(a,REGEXP(a,"瓜",1)))

  第1参数与第2参数表示令变量参数a代替TEXTSPLIT(A2,,","),那么后续两次重复引用的TEXTSPLIT(A2,,",")就都可以用a代替了。

  用let简化公式:分隔符连接的水果名称,只筛选带"瓜"字的水果

  第五步

  合并名称

  优先使用TEXTJOIN强大的分隔符合并功能:

  =TEXTJOIN(",",,LET(a,TEXTSPLIT(A2,,","),FILTER(a,REGEXP(a,"瓜",1))))

  将返回的一列多行的带“瓜”字的水果名称组成的数组溢出区域,用TEXTJOIN函数设置分隔符逗号后进行合并,最终结果显示在单个单元格中。

  这样整体公式既缩短了长度,又增加了可读性。

  用let简化公式:分隔符连接的水果名称,只筛选带"瓜"字的水果