结合正则函数学习一下动态数组核心扩展技巧

职场   2024-10-28 21:58   江苏  
我们通过一个网友的实战案例来一起交流学习一下,动态数组的扩展技巧,顺带学习一下新的正则函数!

▍需求说明

需求比较简单,,前面的数字是学生的序号,后面是这批学生对应的积分,但是由于填写的不规范,实际比较乱(模拟的最乱情况),现在想整理成一维表,一列学号,一列积分,具体看示意结果!


解决这个问题,我们最主要的是提取数字,这部分通过正则函数来完成,不难,但是两列对齐,也就是积分也要按学号个数扩展,写法就比较多了,也是我们本次的核心!

▍核心要点

①要点01-正则匹配数字

第一个要点是提取数字,这个简单的正则即可完成,记住\d表示0-9中的任意一个数字即可!\d+表示匹配1位或者对位数字

下面是WPS中的写法,A1单元格举例,提取的就是全部数字!
=REGEXP(A1,"\d+")


②要点02-数组对齐

如果有一列数字,我们有一个元素想扩展成对应的行数,与其对齐,大部分同学,可能或想到下面的写法


结合上面的案例,我们看一下实战用法!

=LET(S,TOCOL(REGEXP(A1,"\d+")),F,@TAKE(S,-1),HSTACK(DROP(S,-1),EXPAND(F,ROWS(S)-1,,F)))

上面的写法是OK的,但是有点冗长,如果你有数组思路,Excel中有很多数字对齐的写法,下面推荐一种小编常用的!

=LET(S,TOCOL(REGEXP(A1,"\d+")),F,@TAKE(S,-1),IF({1,0},DROP(S,-1),F))


很显然上面的写法精简了不少,下面我们看一下核心部分,IF结构!

=IF({1,0},"A",{1;2;3})
{1;2;3} 是一列三行的常量数组,{1,0} 部分可以理解为{TRUE,FALSE},0 为FALSE,非0为TRUE,这函数处理时,用大括号括起来,表示结果是一个两列的数组,如果其中一个元素是单值会自动对齐填充。如果是多值会#NA填充对齐!这就是核心要点!


当然解决上面的问题,还有很多写法,比如使用WPS的REPTARRAY函数处理,但是还是没有上面的数组思维简洁


除了这些,其实还有很多处理套路,比如容错写法

=LET(S,TOCOL(REGEXP(A1,"\d+")),F,@TAKE(S,-1),IFNA(HSTACK(DROP(S,-1),F),F))

上面的思路:让一个元素和一列内容左右拼接数组,肯定对不齐,确实的部分就会返回#NA错误,使用IFNA函数容错处理,再填充上单值即可!



上面的核心要点讲了,下面我们把这个题写一下吧!

▍参考写法

A1和A2单元格处理逻辑一样,上面我们已经解决了A1单元格,所以我们只要把逻辑使用LAMBDA函数做成一个自定义函数,然后调用即可,比如下面f就是自定义函数的名称,只有一个参数,就是对应的单元格,f(A1)表示调用A1单元格执行逻辑!结果OK!


那么多个单元格,只要使用REDUCE函数,执行后,每次的结果上下堆一下即可!核心是公式中的红色部分,也就是循环处理!

=LET(f,LAMBDA(_t,LET(S,TOCOL(REGEXP(_t,"\d+")),F,@TAKE(S,-1),IF({1,0},DROP(S,-1),F))),REDUCE({"学号","积分"},A1:A2,LAMBDA(x,y,VSTACK(x,f(y)))))


OK!以上就是本次的内容,希望大家都有自己的收获~

一键速达


| 岗前速通 | 数分必备 | 百个函数 | 函数编程 | PQ系列  | 
| 精通查询 全套教程 | 学习社群 | 常用代码 |

[阅读原文] 加入学习圈



Excel办公实战
分享Excel及WPS函数、技巧、VBA、PBI、JSA等办公技能。助你轻松实现办公自动化!易办公◎早下班!
 最新文章