makearray函数用法举例说明及逻辑分析,r和c都是1吗
浅谈出口账务和excel函数
MAKEARRAY 是 Excel 365 / WPS 较新版本中的动态数组函数,核心作用是:
先声明输出几行几列,再按每个坐标 (r, c) 计算该位置的内容。
=MAKEARRAY(行数, 列数, LAMBDA(r, c, 表达式))
LAMBDA(r, c, ...) 对每个坐标计算内容
=MAKEARRAY(3, 4, LAMBDA(r, c, r*10 + c))
· 无状态:不像 SCAN / REDUCE 需要累积器。
· 可引用外部数据:通过 INDEX、SUMIFS 等函数取数。
=MAKEARRAY(3, 4, LAMBDA(r, c, r*10 + c))
=MAKEARRAY(9, 9, LAMBDA(r, c, r*c))
=MAKEARRAY(5, 5, LAMBDA(r, c, r^c))
行数和列数可以不写死,用 COUNTA、ROWS、COLUMNS 动态计算。
INDEX(A2:A100, r) * INDEX(B1:D1, c)
· 每个位置 = 第 r 个产品 × 第 c 个月份
A2:A7 有 6 个值,想变成 3 行 2 列:
=MAKEARRAY(3, 2, LAMBDA(r, c,
INDEX(A2:A7, (r-1)*2 + c)
· 第 1 行第 1 列:INDEX(..., 1)
· 第 1 行第 2 列:INDEX(..., 2)
· 第 2 行第 1 列:INDEX(..., 3)
· 第 2 行第 2 列:INDEX(..., 4)
· 第 3 行第 1 列:INDEX(..., 5)
· 第 3 行第 2 列:INDEX(..., 6)
=MAKEARRAY(5, 5, LAMBDA(r, c,
虽然仍是 5×5 矩形,但上三角留空,视觉上是三角形。
=MAKEARRAY(5, 3, LAMBDA(r, c,
=MAKEARRAY(3, 2, LAMBDA(r, c,
DATE(2026, 10, r + c - 1)
=MAKEARRAY(2, 3, LAMBDA(r, c,
这是 MAKEARRAY 最实用的财务、销售场景之一。
七、与 VSTACK / HSTACK 拼接复杂形状
MAKEARRAY(3, 2, LAMBDA(r,c, "A" & r & c)),
MAKEARRAY(2, 4, LAMBDA(r,c, "B" & r & c))
=MAKEARRAY(0, 3, LAMBDA(r,c, r*c))
=MAKEARRAY(3, 3, LAMBDA(r, r*2))
=MAKEARRAY(3, 3, LAMBDA(r, c, r*2))
不规则形状只能靠 IF 留空,或用 VSTACK / HSTACK 拼接。
例如 1000×1000 = 100 万个格子,容易卡顿。
如果 LAMBDA 里用了 RAND()、NOW()、OFFSET() 等易失性函数,每次重算都会变。
MAKEARRAY 本身不是易失性函数,但内部可以调用易失性函数。
WPS 较新版本支持 MAKEARRAY 和 LAMBDA,但需:
九、与 SEQUENCE、MAP、REDUCE 的对比
SEQUENCE 指定行列 只能生成规则序列 连续数字、日期
MAKEARRAY 指定行列 每个坐标自定义计算 矩阵、交叉表、条件填充
MAP 与输入同形状 多数组逐元素映射 多列逐行计算
SCAN 与输入同形状 单数组状态扫描 累计、填充、状态跟踪
REDUCE 单值或最终数组 归约聚合 求和、拼接、累积
· 要规则矩形,每个格子按坐标算 → MAKEARRAY
· 要筛选、排序、去重 → FILTER / SORT / UNIQUE
先定行数和列数,再对每个坐标 (r, c) 调用 LAMBDA 计算内容。
能用它就用它,比 REDUCE+VSTACK 更直接、更高效。
不是。r 和 c 不是都等于 1,它们是变量,分别代表当前格子的行号和列号。
=MAKEARRAY(行数, 列数, LAMBDA(r, c, 表达式))
· r:当前行号,从 1 开始,一直取到“行数”。
· c:当前列号,从 1 开始,一直取到“列数”。
Excel 会遍历所有 (r, c) 组合,每个位置拿自己的行号和列号去计算。
举例:=MAKEARRAY(3, 4, LAMBDA(r, c, r*10 + c))
=MAKEARRAY(1, 1, LAMBDA(r, c, ...))
但正常情况下,r 和 c 是随位置变化的,不是固定为 1。
每个格子都有自己的 (r, c),不是都等于 1。