WPS动态数组测试(20230923)
最近9月上旬金山公司对WPS增加了动态数组的支持,本人有幸溜进了动态数组的灰度测试先遣队当中,下面就【WPS动态数组】的测试体验简单地说两点:
动态数组是什么?
动态数组可以做什么复杂的事情?
1.动态数组是什么?
在未接触过”动态数组”这个概念之前,可以回想下以前我们在WPS上面录入函数的时候,相关参数是不是只能引用一个单元格?答案是肯定的,因为相关参数只引用了一个单元格,所以函数运行的结果也只能输出一个结果到一个单元格里面。
让我们张开想象的翅膀,如果我们在函数的相关参数当中引用了2个或以上的连续单元格,最终函数运行的结果也能输出2个或以上的连续单元格的结果的时候,那该多好呀!
然后呢?然后WPS果然就听到了我们想象力的呼唤,及时地推出了动态数组的功能,把我们的想象力落到了实处,变成了巨大的生产力。
按我自己的理解,对“动态数组是什么”进行一句话的总结就是:在输入函数参数的时候,要时刻记住不要像以前一样只专一地单单引用一个单元格,要大胆地贪婪地多多地多选几个连续的单元格,然后函数最终就会输出多多的结果——记住,在动态数组的工作环境下,用函数就类似于种树,参数就是种子,种子的数量越多,结的果实数量也就越多,所以要想函数输出更多的结果就请多多地撒种子。
光说不练假把式,下面我从9种不同类型的函数向大家简单地介绍下动态数组函数与静态函数的对比:
①财务函数(选取了用线性折旧方法计算固定资产折旧的函数SLN)
公式如下-
结果如下-
②逻辑函数(选取了函数IFNA)
公式如下-
结果如下-
③文本函数(选取了函数LEFT)
公式如下-动态数组函数中用ROW(INDIRECT("1:"&LEN(D26)构造出1列12行的数组{1;2;3;4;5;6;7;8;9;10;11;12}
结果如下-
④时间函数(选取了函数YEAR)
公式如下-
结果如下-
⑤查找与引用函数(选取了函数EVALUATE)
公式如下-
结果如下-
⑥数学与三角函数(选取了函数ABS)
公式如下-
结果如下-
⑦统计函数(选取了函数LARGE)
公式如下-动态数组函数中用SEQUENCE(12,1,1,1)构造出1列12行的数组{1;2;3;4;5;6;7;8;9;10;11;12}
结果如下-
⑧工程函数(选取了十进制转二进制函数DEC2BIN)
公式如下-
结果如下-
⑨信息函数(选取了判断数值是否为奇数的函数ISODD)
公式如下-
结果如下-
可能大家看了上面9种不同类型动态数组函数的公式和结果截图,觉得所谓的“动态数组”平平无奇,不过如此嘛,不晓得他厉害在哪里以及如何地发挥他厉害的威力。于是,有请大家看第二点:
2动态数组可以做什么复杂的事情?
动态数组他可以做复杂的事情,很复杂的事情都可以,请看下图:
我今天去饮早茶了,账单如上图所示,于是我对着“动态数组”说——“组哥你可以把上面账单出现的英文、中文、数字分离出来吗?可以把里面出现的数字加总起来最终得出今天我要埋单的金额吗?”
组哥只是淡淡地说了句“弟,以后这些问题都交给我解决吧”,然后他大手一挥甩给了我以下几张截图:
①提取英文
结果如下:
公式如下:
=CONCAT(IFERROR(UNICHAR(IF(IFERROR(UNICODE(UNICHAR(IF(UNICODE(MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1))>=65,UNICODE(MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1)),""))),0)<=122,IFERROR(UNICODE(UNICHAR(IF(UNICODE(MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1))>=65,UNICODE(MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1)),""))),0),"")),""))
②提取中文
结果如下:
公式如下:
=CONCAT(IFERROR(UNICHAR(IF(UNICODE(MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1))>=123,UNICODE(MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1)),""))," "))
③提取数字
结果如下:
公式如下:
=CONCAT(IFERROR(UNICHAR(IF(IFERROR(UNICODE(UNICHAR(IF(UNICODE(MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1))>=48,UNICODE(MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1)),""))),0)<=57,IFERROR(UNICODE(UNICHAR(IF(UNICODE(MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1))>=48,UNICODE(MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1)),""))),0),"")),""))
④数字合计
结果如下:
公式如下:=EVALUATE(CONCAT(0,IFERROR(UNICHAR(IF(UNICODE(MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1))<=57,UNICODE(MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1)),"")),"+"),0))
一图总览
我一看这些图片马上服了,动态数组果然生产力爆棚啊!连忙问组哥这些公式的核心思路是什么,他说:
上面的例子用到的动态数组函数最核心子模块是“=MID(A2,COLUMN(A1:OFFSET(A1,0,LEN(A2)-1)),1)”,通过这个含有动态数组的公式把A2单元格里面的全部字符串一一放到单一的单元格里面最终构成一行,然后根据英文字母的unicode值在65-122这个区间的特性、中文字符的unicode值在大于等于123这个区间的特性、阿拉伯数字的unicode值在48-57这个区间的特性,通过相关条件的约束把区间闭合起来再用巴黎铁塔反转反转再反转的辗转腾挪术则可以筛选出相关的英文字母、中文字符、阿拉伯数字;另外在把阿拉伯数字筛选出来之后用“+”号替换空格号“”再在头尾加个“0”,这个架步像极了加法,就差一个“=”等于号了,所以我们就把这个机会留给了EVALUATE()函数。
我:“组哥威武,组哥万岁!”
组哥:“其实我也觉得我很帅^v^”
社区优秀创作者
WPS函数专家