WPS正式开启函数式编程时代
KVP函数专家、创作者俱乐部成员
4月24日,WPS版本号更新到了16894,此次更新共新增了12个函数,其中包含了7个LAMBDA类函数,4个WPS独有函数(其中ROUNDBANK函数为16729版本更新),2个其他类辅助函数,具体函数如下图所示。
我将分三天分享新增函数的使用方法。
第1天:LAMBDA类函数
第2天:REGEXP正则函数
第3天:WPS独有函数
今天是第1天,分享LAMBDA类函数。
一、MAP函数(循环数组返回计算后每个值结果)
函数可以将一个或多个大小相同的单元格区域或数组作为变量数组,函数会依次循环单元格区域或数组中的每一个值,将一个或多个值传递给LAMBDA函数计算,函数将返回变量数组中每个值计算后的结果,返回的结果数组大小和传入的变量数组大小相同,函数语法如下图所示。
在动态数组功能和新函数的支持下,在处理一些复杂的问题时,也变得相对轻松很多,在软件功能变得强大的同时,对处理问题方式也有了更高的要求,比如使用UNIQUE函数对每一行数据去重复项后使用TEXTJOIN函数拼接成一个字符串,又比如使用SUM函数对每一行数据求和,需要输入公式后向下填充到多个单元格区域,无法输入一个公式后通过动态数组溢出的功能完成。
这是因为一些新函数自身就可以返回数组结果,所以无法同时计算多组值并且返回多组独立的结果,比如使用FILTER函数,无法一次筛选多个值并且返回多组结果,又比如使用UNIQUE函数也无法同时对多行或多列去重复后返回对应的多行或多列结果
还有当使用了聚合函数时,如SUM、COUNTA、MIN、MAX、CONCAT等函数时,这些函数可以将多个值计算后返回一个值,在使用这些函数时,因为函数只返回一个单值,无法返回数组,自然也无法使用动态数组的溢出功能了。
当使用了聚合函数或使用了可以返回数组结果的新函数时,同时需要输入一个公式可以查询或计算返回多组独立的结果,使用MAP函数可以解决这一问题。
示例1、根据姓名查询所有报名课程
示例2、对每个单元格中的内容去重复项
需要注意的是,MAP函数中的LAMBDA函数只能返回单值,如果LAMBDA函数返回数组,MAP函数将返回错误值#CALC!。
二、SCAN函数(循环数组返回计算后每个中间过程值)
SCAN函数可以先指定一个初始化变量,然后再指定一个单元格区域或数组作为变量数组,函数会向LAMBDA函数传入2个参数,第1个参数为初始化值,第2个参数为变量数组,函数会依次循环参数2变量数组中的每一个值,在循环过程中,函数会将当前计算结果保存,在下一次计算时,会将上一次计算的结果通过变量1传入LAMBDA函数,SCAN函数将返回变量数组中每个值计算后的结果,返回的结果数组大小和参数2传入的变量数组大小相同,函数语法如下图所示 。
示例1、根据收入支出计算余额
示例2、拆分并填充合并单元格
示例3、根据库存数量按下单顺序发货,发完为止,将可以发货的订单筛选出来
需要注意的是,SCAN函数中的LAMBDA函数只能返回单值,如果LAMBDA函数返回数组,SCAN函数将返回错误值#CALC!。
三、REDUCE函数(循环数组返回计算后的累计结果)
REDUCE函数可以先指定一个初始化变量,然后再指定一个单元格区域或数组作为变量数组,函数会向LAMBDA函数传入2个参数,第1个参数为初始化值,第2个参数为变量数组,函数会依次循环参数2变量数组中的每一个值,在循环过程中,函数会将当前计算结果保存,在下一次计算时,会将上一次计算的结果通过参数1传入LAMBDA函数,REDUCE函数将返回变量数据中每个值计算后的累计结果,函数语法如下图所示。
示例1、批量查询多个姓名的明细
示例2、根据工资明细表生成工资条
示例3、根据替换名单批量替换人员
四、BYROW函数(循环数组行返回计算后的一列结果)
BYROW函数可以将一个单元格区域或数组按行循环,将每行数据传入LAMBDA函数计算,函数将返回每一行计算后的一列结果,返回的结果数组行数和传入的变量数组行数相同,函数语法如下图所示。
示例1、计算多个科目的总分
示例2、将省市区三个单元格的值连接到一个单元格
五、BYCOL函数(循环数组列返回计算后的一行结果)
BYCOL函数可以将一个单元格区域或数组按列循环,将每列数据传入LAMBDA函数计算,函数将返回每一列计算后的一行结果,返回的结果数组列数和传入的变量数组列数相同,函数语法如下图所示。
示例1、计算每个科目的平均分
六、MAKEARRAY函数(根据指定行列返回计算后的数组结果)
MAKEARRAY函数可以指定行数和列数,函数将根据行数和列数的乘积数来循环,每次将当前对应行列值传入LAMBDA函数计算,MAKEARRAY函数将返回计算后的数组结果,函数语法如下图所示。
示例1、生成九九乘法表
七、ISOMITTED函数(判断LAMBDA参数是否省略)
ISOMITTED函数可以判断LAMBDAB函数中的参数是否省略,函数语法如下图所示。
示例1、创建计算边长自定义公式
使用LAMBDA函数创建一个包含可选参数的自定义函数,在参数名称添加“[]”符号即可将参数设置为可选,使用ISOMITTED函数判断参数“宽”是否省略,如果省略使用正方形计算公式边长*4,否则使用长方形计算公式(长+宽)*2。
八、LAMBDA函数的简写(公式中的语法糖)
在使用需要LAMBDA函数作为参数的函数时,主要应用于MAP、SCAN、REDUCE、BYROW、BYCOL、MAKEARRAY、GROUPBY、PIVOTBY函数中,新增了一种简写语法,可以在参数为LAMBDA函数的参数中直接输入函数名称,可以省略LAMBDA函数的构架过程。
其中GROUPBY、PIVOTBY函数需要过段时间更新,本次就不展开具体讲解了。
示例1、计算多个科目的总分
示例2、根据收入支出计算余额(支出为负数)
示例3、筛选多列缺考姓名名单
在没有LAMBDA类函数之前,处理这类问题需要添加辅助列,或使用MMULT函数,公式如下。
虽然MMULT函数可以解决,但是MMULT函数却让很多小伙伴直呼头疼,现在可以使用BYROW函数,公式会更简洁易懂,公式如下。
示例4、支持自定义函数
使用LAMBDA函数通过名称管理器创建自定义函数,或LET函数中创建自定义函数,也是支持语法糖的,如下图所示。
16894版本已开始逐步更新,目前官网还没有更新,想提前体验的小伙伴可以通过下方链接下载
以上是本次分享的内容,欢迎大家留言探讨,我们明天见~
KVP函数专家、创作者俱乐部成员
创作者俱乐部成员
创作者俱乐部成员