map和lambda如何适用多数组举例说明
浅谈出口账务和excel函数
SCAN 只吃一个数组,MAP 可以同时吃多个数组。
只要多个数组尺寸完全一致,MAP 就会逐元素把它们配对,交给 LAMBDA 计算。
=MAP(数组1, 数组2, ..., LAMBDA(参数1, 参数2, ..., 计算表达式))
=MAP(A2:A4, B2:B4, LAMBDA(q, p, q*p))
=MAP(A2:A4, B2:B4, LAMBDA(f, l, f & l))
=MAP(A2:A4, B2:B4, LAMBDA(a, t, IF(a>=t, "达标", "未达标")))
示例 4:数量 × 单价 × (1-折扣) = 净额
=MAP(A2:A4, B2:B4, C2:C4, LAMBDA(q, p, d, q*p*(1-d)))
· 第 1 行:10 × 100 × (1-0.1) = 900
· 第 2 行:20 × 50 × (1-0.2) = 800
· 第 3 行:5 × 200 × (1-0) = 1000
示例 5:库存 + 在途 < 安全库存 → 需补货
=MAP(A2:A4, B2:B4, C2:C4, LAMBDA(stock, transit, safe,
IF(stock+transit < safe, "需补货", "充足")
=MAP({1,2,3}, {10,20,30}, LAMBDA(a, b, a+b))
单数组,每个元素乘 2 =MAP(A2:A10, LAMBDA(x, x*2))
双数组,逐行数量×单价 =MAP(A2:A10, B2:B10, LAMBDA(q,p, q*p))
三数组,逐行数量×单价×(1-折扣) =MAP(A2:A10, B2:B10, C2:C10, LAMBDA(q,p,d, q*p*(1-d)))
如果只想乘一个常数,不要写成 MAP(A2:A10, 2, LAMBDA(x,y, x*y))。
因为 2 是单个值,尺寸与 9 行数组不一致,会报错。
=MAP(A2:A10, LAMBDA(x, x*2))
例如:A 列金额,B 列类型,要求按类型分别累计:
=MAP(A2:A10, B2:B10, LAMBDA(amt, type,
SCAN(0, FILTER(A2:A10, B2:B10=type), LAMBDA(x,y, x+y))
这个例子较复杂,但说明 MAP 可以把多数组拆开后,再交给 SCAN 做状态计算。
=MAP(A2:A10, B2:B5, LAMBDA(a,b, a+b))
A 列 9 行,B 列 4 行,尺寸不同,报 #VALUE!。
=MAP(A2:A10, B2:B10, LAMBDA(a, a*2))
给了两个数组,但 LAMBDA 只有一个参数,报错。
=MAP(A2:A10, B2:B10, LAMBDA(a, b, a*b))
=MAP(A2:A10, B2:B10, LAMBDA(a,b, a*b))
=SUM(MAP(A2:A10, B2:B10, LAMBDA(a,b, a*b)))
如果你想“A 列每个元素 × B 行每个元素”生成矩阵,用 MAKEARRAY:
=MAKEARRAY(ROWS(A2:A10), COLUMNS(B1:J1), LAMBDA(r, c,
INDEX(A2:A10, r) * INDEX(B1:J1, c)
多个同尺寸数组 → 按位置配对 → LAMBDA 多参数接收 → 逐元素计算 → 输出同形状数组。