新增的11个函数如下图所示。
WPS已支持动态数组功能,一些新函数自身已经可以返回数组结果了,如果需要对函数返回的数组结果进行二次计算,就需要使用数组函数来处理了,WPS本次更新了11个数组函数,可以对数组进行合并、提取、转换、删除等操作,其强大的功能将为你带来意想不到的惊喜。
下面我们来具体看下每个函数的使用场景。
VSTACK(垂直拼接数组 行向下)示例1、多表查询
=VLOOKUP(B5:B7,VSTACK(E5:F11,H5:I11),2,0)
在没有VSTACK函数之前,对多表查询需要使用IFERROR函数多层嵌套,使用VSTACK函数可以将多个单元格区域或数组依次向下拼接成一个数组,作为VLOOKUP函数第2个参数。
示例2、多表去重复
=UNIQUE(VSTACK(E16:E22,H16:H22))
使用VSTACK函数可将多个不相连的单元格区域拼接成一个数组,然后使用UNIQUE函数去重复。
示例3、多表汇总
=FILTER(VSTACK(表1:表3!A2:C1000),CHOOSECOLS(VSTACK(表1:表3!A2:C1000),3)<>"")
使用VSTACK函数可以将连续的多个工作表组的指定单元格拼接,多个工作表行数不同时,可以引用相对较大的区域,拼接后使用FILTER函数将非空的数据筛选出来。
HSTACK(水平拼接数组 列向右)示例、一条公式汇总
=HSTACK(UNIQUE(E5:E11),SUMIFS(F5:F11,E5:E11,UNIQUE(E5:E11)))
HSTACK函数可能横向的依次向右拼接数组,可以将多列公式合并成一条公式。
TOROW(将数据转换为一行)示例、查询组别后将多行多列转为一行
=TOROW(FILTER($J$5:$K$12,$I$5:$I$12=B5),1)
使用FILTER函数查询后返回多行多列数据,使用TOROW函数将多列数据转为一行。
TOCOL(将数据转换为一列)示例1、多列去重复
=UNIQUE(TOCOL(D5:G9))
使用TOCOL函数将多行多列数据转换成一列后,使用UNIQUE函数去重。
示例2、生成所有组合
=TOCOL(TOCOL(TOCOL(D15:D19,1)&"-"&TOROW(E15:E19,1))&"-"&TOROW(F15:F19,1))
考虑到函数的通用性,引用一个相对大一些的单元格区域,使用TOCOL函数,通过设置TOCOL函数的第2个参数为1,忽略空值,可以将空值过滤掉,可以返回所有名称,使用TOCOL函数将规格转成一列,使用“&”运算符连接后可以返回一个多行多列的连接了名称和规格的数组,使用TOCOL函数将多行多列转换成一列,再使用相同方法连接型号后转换。
WRAPROWS(将一维数组按行转化为二维数组)示例、将一列数据转换为多行(按行转换)
=WRAPROWS(G5:G17,3,"")
使用WRAPROWS函数可以多一行或一列的数据按行转换成多行,函数第2个参数可以设置转换后的列数,也可以理解为转换时每N列后换行。
WRAPCOLS(将一维数组按列转化为二维数组)示例、将一列数据转换为多行(按列转换)
=WRAPCOLS(G5:G17,5,"")
使用WRAPROWS函数可以多一行或一列的数据按列转换成多列,函数第2个参数可以设置转换后的行数,也可以理解为转换时每N行后换列。
CHOOSEROWS(返回数组或引用中的行)=CHOOSEROWS(B5:F9,--TEXTSPLIT(CONCAT(REPT(SEQUENCE(5)&"-",G5:G9)),"-",,1))
使用--TEXTSPLIT(CONCAT(REPT(SEQUENCE(5)&"-",G5:G9)),"-",,1)可以根据每行数量,返回对应数量重复N次的行号,使用CHOOSEROWS函数可以返回对应行数的数据。
CHOOSECOLS(返回数组或引用中的列)=CHOOSECOLS(F5:J11,1,4,5)
使用CHOOSECOLS函数可以返回引用区域或数据的指定一列或多列。
TAKE(从数组开头或结尾返回行或列)示例、随机抽奖,抽3名不重复的姓名
=TAKE(SORTBY(F5:H11,RANDARRAY(7)),3)
使用SORTBY和RANDARRAY函数对数据源随机排序,然后使用TAKE函数返回前3行的数据,即可实现随机抽取3行不重复数据。
DROP(从数组开头或结尾删除行或列)示例、金额降序排序后,删除倒数第3以后的行数,如有倒数第3的金额重复的也一同删除
=DROP(SORT(F5:H11,3,-1),-COUNTIFS(H5:H11,"<="&SMALL(H5:H11,3)))
使用SORT函数对源数据进行降序排序,使用SMALL函数计算第3最小值,然后使用COUNTIF函数计算小于等于第3个最小值的数据,使用“-”计算符将数量转换负数,即可从数据的结尾删除指定行数。
EXPAND(将数组扩展指定数量行列)示例、分数60分及以上的行筛选出来并且加一列标注为“优秀”
=EXPAND(FILTER(G5:I11,I5:I11>=60),,4,"优秀")
使用FILTER函数筛选出分数大于等于60分的数据,然后使用EXPAND函数将数据源的3列扩展为4列,设置EXPAND函数第4个参数可以指定扩展后列的填充值。