excel函数使用介绍, REGEXP, TEXTJOIN, MAP, REDUCE

REGEXP

今天同事在整理数据的时候,发现MAC地址是没有分割符的,是这样的

他问我能不能每两个字符加一个-分割,变成这样

他这话说的,做为一个CRUD了30年的工程师,这不是小意思,随手发了个python操作excel的库给他,他说不想写代码,想用函数直接生成。这可把我难倒了,我平时都不怎么用wps,以前也只简单用过IF啥的,但最终我还是同意了,不是因为他说请我喝奶茶,主要是我想进步。

打开excel,随便写个=,发现一堆函数,根据以前写程序的经验,写了一些函数前缀,竟然都有相关的函数,比如去除空白字符的 TRIM,文本相关函数TEXT开头的,正则相关的REGEXP,最神奇的是,居然还有LAMBDA、MAP、REDUCE,wps的函数现在都这么强的吗?

回到这个问题,他要2个字符一个-,这个用正则就好了,先两两匹配,MAC地址其实就是一串字符和数字,我们用\w来,两个就是\w\w

就变成这样了,函数返回的是一个数组,我们要在一个单元格显示,加一个TEXTJOIN就好了

=TEXTJOIN("-",TRUE,REGEXP(A1,"\w\w"))

这样奶茶是不是就到手了,唉,不对,这样是不是又进步了


正则反向引用

正则在处理字符串这块是非常好用的,于是为了进步,想试下wps的正则函数是否有反向引用功能

1024单独提取出来

反向引用前提

  1. 正则表达式有分组功能,就是用 ()

  1. 引用的时候用反斜杠加数字,第一个分组用 \1,第二个用\2,以此类推

先分析数据

张三工资1024

对应的正则应该是

张三工资[^\d] 不是数字

1024 \d 数字

[^\d] 不是数字

联合起来应该就是:[^\d]*(\d*?)[^\d]*

我们要反向引用数字,所以用括号括起来,完整正则:

=REGEXP(A17,"[^\d]*(\d*?)[^\d]*",2,"\1")

MAP函数

map可以理解为一个循环语句,配合LAMBDA,可以遍历数据做一些数据处理,输入的数量是多少,输出就是多少

REDUCE

reduce跟map有些不一样,它有两个输入参数,一个是上次的结果,一个是当前数据,执行流程如下

每次计算结果会当作下一次计算的输入,因为第一次计算的时候,没有上次输入,所以 REDUCE 第一个参数 初始值会当作第一次计算的输入,作数字运算的时候可以传0,字符运算传""就行了,当然也可以根据业务传其它值,下面我们来体验一下

先来个最简单的求和操作

我们用SUM 给1到10求和结果是 55,我们用REDUCE来实现一个求和功能

=REDUCE(0,A6:A15,LAMBDA(r,v,r+v))

对着上面的流程图看

奇数和

不能被2整除的数叫做奇数

此时要配合 IF 函数来了,再来介绍一个函数 MOD,叫取模函数,其实就是余数,能被2整除的余数应该是0,也就是偶数,否则就是奇数

IF 我们就这样写

IF(MOD(v,2)=0,r,r+v)

如果是偶数,我们就不运算,直接将上次运算的结果返回,否则就加上当前值

=REDUCE(0,A6:A15,LAMBDA(r,v,IF(MOD(v,2)=0,r,r+v)))

偶数和

这个就简单了,将 r 和 r+v 换一下位置就好了

大概就这些了,其它函数还没研究就不说了

中国香港
浏览 280
1
3
分享
3 +1
4
1 +1
全部评论 4
 
wps新路
wps新路

WPS函数专家

=TEXTJOIN("-",,REGEXP(A1,".{2}")) 感觉任意字符2位的话这样会更好点,以后万一是100个字符写100个\w? 写个正则以前的写法 =TEXTJOIN("-",1,MID(A1,ROW(1:99)*2-1,2))
· 重庆
回复
wps新路
wps新路

WPS函数专家

分别是1-10奇数和偶数的和
· 重庆
回复
 
懒得批爆
懒得批爆

创作者俱乐部成员

多喝奶茶少喝水,有益身体健康
· 四川省
回复
 
亂雲飛渡
点赞学习
· 广东省
回复