WPS表格中MAKEARRAY函数的深度应用实例
WPS表格中MAKEARRAY函数的深度应用实例
一、函数简介
MAKEARRAY是WPS表格中的动态数组函数,用于根据自定义规则生成指定行列数的二维数组。其语法为:
=MAKEARRAY(行数,列数,LAMBDA(r,c,计算公式)),通过应用LAMBDA函数返回指定行和列大小的计算数组。
行数:生成数组的行数
列数:生成数组的列数
LAMBDA:以行号(r)和列号(c)为参数的函数,定义每个单元格的计算规则
二、应用场景实例
场景1:生成动态乘法表
需求:快速创建9×9乘法表,避免手动输入公式。
公式:=MAKEARRAY(9,9,LAMBDA(r,c,IF(c<=r,r&"×"&c&"="&r*c,"")))
步骤分解:
设置行列范围:r=9, c=9
定义LAMBDA规则:每个单元格显示r×c=结果格式(r为当前行号,c为当前列号),用IF来判断列小于等于行号时,就显示该列的数据,否则就为空值。
自动填充:无需拖拽公式,自动生成完整乘法表
具体结果如下图所示:
场景2:批量转换温度单位
需求:将A列中的摄氏温度(C2)批量转换为华氏度,并生成两列数据(原值+转换值)。
公式:=MAKEARRAY(ROWS(C2:C10),2,LAMBDA(r,c,IF(c=1,INDEX(C2:C10,r),INDEX(C2:C10,r)*9/5+32)))
步骤分解:
确定行数:ROWS(C2:C10)获取原始数据行数
设置两列:columns=2(原温度 + 转换结果)
条件判断:
第1列(c=1)直接显示原值
第2列通过公式C×9/5+32转换
输出效果:
场景3:动态考勤表标记周末
需求:生成2024年1月的考勤表,自动标记周末为灰色背景。
公式:=MAKEARRAY(1,31,LAMBDA(r,c,IF(WEEKDAY(DATE(2025,1,c), 2)>5,TEXT(c, "dd") & "✓",TEXT(c, "dd"))))
步骤分解:
生成31天:columns=31
日期处理:DATE(2025,1,c)创建日期对象
周末判断:WEEKDAY(...,2)>5识别周六/日
格式标记:周末日期后添加"✓"符号(结合条件格式设置背景色)
结果如下图所示:
场景4:随机验证码生成器
需求:为员工批量生成8位包含大小写字母+数字的随机验证码。
公式=MAKEARRAY(10,1,LAMBDA(r,c,TEXTJOIN("",TRUE,MAKEARRAY(1,8,LAMBDA(_,__,MID("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",RANDBETWEEN(1,62),1))))))
关键技术点:
嵌套MAKEARRAY:外层生成10个验证码,内层生成8个字符随机字符选择:通过RANDBETWEEN(1,62)从62个字符中随机选取拼接字符串:TEXTJOIN将8个字符合并为1个验证码。
结果如下图所示:
场景5:数据抽样(随机不重复编号)
需求:从1——100中随机抽取10个不重复的编号。
公式:=LET(s,SORTBY(SEQUENCE(100),RANDARRAY(100)),MAKEARRAY(10,1,LAMBDA(r,c,INDEX(s,r))))
结果如下图所示:
场景6:生成动态日历
需求:生成2025年当月的日历矩阵(按周分布)。
公式:=MAKEARRAY(6,7,LAMBDA(r,c,LET(d,DATE(TEXT(TODAY(),"yyyy"),TEXT(TODAY(),"m"),1)+(r-1)*7+(c-1),IF(MONTH(d)=--TEXT(TODAY(),"m"),DAY(d),""))))
结果如下图所示:
场景7:行列求总和
需求:生成每行总和和每列总和
公式:=MAKEARRAY(5,6,LAMBDA(r,c,IFS(r*c=30,SUM(B2:F6),c=6,SUM(INDEX(B2:F6,r,)),r=5,SUM(INDEX(B2:F6,,c)),AND(r<5,c<=6),INDEX(B2:F6,r,c))))
结果如下图所示:
场景8:多行多列查找引用
需求:一次性引用多行多列数据
公式:=MAKEARRAY(2,5,LAMBDA(r,c,XLOOKUP(INDEX(H2:H3,r),A2:A5,INDEX(B2:F5,,c))))
结果如下图所示:
场景9:表格转置,汇总数据并排序
需求:把二维表转置为多维表格形式,并对数据进行汇总求和后排序。
公式:=LET(s,SORTBY(UNIQUE(A2:A13),SUMIFS(C2:C13,A2:A13,UNIQUE(A2:A13)),-1),w,TOROW(UNIQUE(B2:B13)),h,HSTACK("产品种类",w),m,MAKEARRAY(ROWS(s),COLUMNS(w),LAMBDA(a,b,SUMIFS(C2:C13,A2:A13,INDEX(s,a),B2:B13,INDEX(w,b)))),VSTACK(h,HSTACK(s,m)))
结果如下图所示:
场景10:多维数据汇总
公式:=LET(u,UNIQUE(B3:B12),w,TOROW(UNIQUE(C3:C12)),h,HSTACK("姓名",w),m,MAKEARRAY(ROWS(u),COLUMNS(w),LAMBDA(r,c,CONCAT(FILTER(D3:D12,(B3:B12=INDEX(u,r))*(C3:C12=INDEX(w,c)),"")))),VSTACK(h,HSTACK(u,m)))
结果如下图所示:
函数优势总结
动态数组特性:自动填充结果,无需手动拖拽公式
灵活处理复杂逻辑:可嵌套IF、INDEX、RAND等函数
代码简化:替代传统需要复杂数组公式的场景
数据实时更新:当输入数据变化时,结果自动重算
通过以上实例可以看到,MAKEARRAY在处理批量数据生成、格式转换、动态模板创建等场景中具有显著优势,特别适合需要结合行列索引进行复杂计算的场景。