温馨提示:练习文件代码附在文章末尾,私信回复自取。
WPS中有几个独有的函数,功能非常强大,一度让不少Excel用户眼馋。
REPTARRAY函数的强大,我举一个例子。
我们在INDEX章节有一个练习函数071篇:INDEX函数03——阶梯取数及背后的数学原理讲解,需要构造周期性数组。

相对来说,难度还是偏大。

难点就在构造{1;2;3;4;5;6;7;6;5;4;3;2;1;2;3;4;5;……}这样的周期性数组,如果有REPTARRAY函数,就很好解决。
本期就来手搓一个WPS专属函数——REPTARRAY,下期再搓一个SUBSTITUTES。
一、REPTARRAY函数
我们先看WPS官方文档对REPTARRAY函数的描述:

共三个参数,第二、三参数为可选参数,若省略则默认为1。
二、步骤拆解
1、整体思路
如下图,REPTARRAY是将整个数组作为1个整体,根据指定的行/列重复次数返回全新的数组。

把第一参数视为源数据,在源数据中按周期取数,就能实现REPTARRAY的效果。
以行重复2次、列重复3次为例,用INDEX可实现。

所以,问题就转为构造INDEX函数的第二、三参数了。
【说明】自定义的REPTARRAY函数语法结构如下:
=REPTARRAY(array,[rows_rept],[cols_rept])①array:源数组,必选参数。
②rows_rept:行重复次数,可选参数,省略或小于等于1都视作1,容错性处理。
③cols_rept:列重复次数,可选参数,省略或小于等于1都视作1,容错性处理。
2、INDEX第二参数
第二参数是行号,REPTARRAY第一参数有几行,就需要生成1到几的序列数组,然后再周期性循环。

需要用到MOD函数取模(即取余数),在阶梯取数章节做过推演函数071篇:INDEX函数03——阶梯取数及背后的数学原理讲解,这里直接套公式。

=MOD(SEQUENCE(ROWS(array)*rows_rept,,0),ROWS(array))+1
INDEX的第三参数是列号,REPTARRAY有几列,就需要构造1到几的周期数组,同行号的构造原理一致。
=MOD(SEQUENCE(,COLUMNS(array)*cols_rept,0),COLUMNS(array))+1传入参数看看:

=LAMBDA(array,[rows_rept],[cols_rept],LET(row_num,IF(rows_rept>1,MOD(SEQUENCE(ROWS(array)*rows_rept,,0),ROWS(array))+1,SEQUENCE(ROWS(array))),col_num,IF(cols_rept>1,MOD(SEQUENCE(,COLUMNS(array)*cols_rept,0),COLUMNS(array))+1,SEQUENCE(,COLUMNS(array))),INDEX(array,row_num,col_num)))







WPS帮助文档代码:帮助
练习文件自取:私信回复999,不是留言
精彩合集: