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,第二个用\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 换一下位置就好了
大概就这些了,其它函数还没研究就不说了
WPS函数专家
WPS函数专家
创作者俱乐部成员