在Excel动态数组函数体系中,LAMBDA及其配套函数构成了强大的逻辑处理工具链。从简单的按行汇总到复杂的多数组运算,这七个函数能够应对绝大多数批量数据处理场景。本文以销售数据批量处理系统为实战背景,系统讲解这七个函数的使用方法和适用场景。
一、动态数组函数在逻辑函数中的定位
传统的Excel函数在处理多行数据时,往往需要配合拖拽填充或数组公式才能完成批量操作。动态数组函数的出现彻底改变了这一局面——它们能够直接在内存中处理整个数据区域,并自动溢出结果。
在动态数组函数家族中,LAMBDA是整个体系的基石。没有LAMBDA,BYROW、BYCOL、MAP等函数就失去了“计算逻辑”的载体。理解这一点至关重要:其他函数负责“做什么”,LAMBDA负责“怎么做”。例如:
=BYROW(B2:E2,LAMBDA(row,AVERAGE(row)))
这行公式中,BYROW决定了“按行处理”的执行方式,而LAMBDA(row,AVERAGE(row))则定义了具体的计算逻辑——对每一行的数据求平均值。
本专题的七个函数可分为三类:迭代器函数(SCAN、REDUCE、MAKEARRAY)、映射函数(MAP)、以及遍历函数(BYROW、BYCOL)。掌握它们的分工协作,是进阶动态数组应用的关键。
二、四大动态数组函数的能力对比
在正式开始讲解之前,先通过一张对比表建立整体认知:
这四个函数的共同特点是“输入数组,输出数组”,但输出结果的维度各不相同。BYROW和BYCOL会将二维数组压缩成一维,MAP保持原有维度,MAKEARRAY则可以生成任意维度的新数组。
例如,使用示例数据中的张伟季度销售额(B2:E2,数值分别为85000、92000、88000、95000):
=BYROW(B2:E2,LAMBDA(row,AVERAGE(row)))
此公式输出一个单一数值90000,因为BYROW将四列数据聚合为一行统计结果。
而MAKEARRAY则能生成全新的数据结构。假设需要创建一个5行3列的乘法表:
=MAKEARRAY(5,3,LAMBDA(r,c,r*c))
此公式生成的数组为:
1 2 32 4 63 6 94 8 125 10 15理解这种输出差异,是选择合适函数的前提。
三、按行/按列处理:BYROW vs BYCOL
BYROW和BYCOL是处理行列统计的利器。它们将一个二维数组按行或按列拆解,对每个子数组应用LAMBDA逻辑,最终输出聚合结果。
3.1 BYROW的实际应用
回到销售数据场景,需要计算每位销售员的年均季度销售额。传统的做法是新增辅助列,用公式“=(B2+C2+D2+E2)/4”逐行填充。在动态数组时代,只需一个公式即可完成全部20行的计算:
=BYROW(B2:E21,LAMBDA(row,AVERAGE(row)))
此公式对B2:E21区域的每一行分别求平均值,结果自动溢出到F2:F21区域。张伟的年均季度为90000,李娜为54000,王强为38500,以此类推。

3.2 BYCOL的场景适用
BYCOL的用法与BYROW类似,但方向相反。当需要按列汇总数据时使用。例如,要计算Q1至Q4四个季度的销售总额:
=BYCOL(B2:E21,LAMBDA(col,SUM(col)))
这会输出四个数值:B列总和(1,070,000)、C列总和(1,120,000)、D列总和(1,090,000)、E列总和(1,170,000)。如果将这个结果与年初制定的季度目标对比,就能快速发现各季度的完成情况。
3.3 条件统计的进阶用法
结合LAMBDA的条件判断,BYROW和BYCOL还能实现条件统计。例如,统计每位销售员的“达标季度数”(季度销售额超过60000的次数):
=BYROW(B2:E21,LAMBDA(row,SUM(--(row>60000))))
公式中的--(row>60000)将逻辑值转换为0和1,便于SUM函数求和。张伟有4个季度达标,李娜仅有1个,王强为0个。这种条件统计在销售分析中非常实用。
四、逐元素转换:MAP
MAP函数是“元素级”的转换工具。它对输入数组的每个元素逐一执行LAMBDA逻辑,输出一个维度完全相同的新数组。如果把BYROW和BYCOL比作“列标题汇总”,MAP就是“逐格填写”。
4.1 基础转换示例
以“是否达标”列为例。根据业务规则,年均季度销售额达到55000以上视为达标。MAP可以实现这一判断:
=MAP(BYROW(B2:E21,LAMBDA(row,AVERAGE(row))),LAMBDA(avg,IF(avg>=55000,"达标","未达标")))
这行公式的逻辑是:先用BYROW计算每位销售员的年均季度,再用MAP判断是否达标。
需要特别说明的是,MAP函数接收的第一个参数可以是任何数组,上例中BYROW的输出就是MAP的输入。这种嵌套使用是动态数组函数的高级技巧。
4.2 多数组联动
MAP的真正威力体现在多数组处理上。假设销售部门制定了新的提成规则:达标销售员额外获得5%的奖金系数,未达标者为2%。需要根据“是否达标”字段生成“奖金系数”列:
=MAP(F2:F21,LAMBDA(status,IF(status="达标",1.05,1.02)))
这行公式引用了F列的达标判断结果,输出对应的奖金系数。MAP会自动将F2:F21的每个值代入LAMBDA计算,生成同等尺寸的结果数组。

4.3 数据标准化处理
MAP还常用于数据清洗和标准化。例如,将所有季度销售额除以10000转换为“万元”单位:
=MAP(B2:E21,LAMBDA(x,x/10000))
转换后的数据更易阅读,也便于后续的可视化展示。
五、累计分析:SCAN vs REDUCE
SCAN和REDUCE是一对孪生函数,它们都执行迭代累计操作,区别在于输出内容:REDUCE只返回最终结果,SCAN返回所有中间步骤。
5.1 REDUCE的基本用法
REDUCE的经典应用是求和。上文核心公式示例中的“累计增长”列计算,实际上就是将四个季度的销售额累加:
=REDUCE(0,B2:E2,LAMBDA(acc,x,acc+x))
这行公式的含义是:初始值设为0,依次将B2:E2的每个值加入累计器acc,最终返回累加总和。以张伟为例,计算过程为:

5.2 SCAN的中间结果
将上述公式中的REDUCE替换为SCAN:
=SCAN(0,B2:E2,LAMBDA(acc,x,acc+x))
SCAN会返回数组[85000, 177000, 265000, 360000]——这正是REDUCE的四个累计步骤。SCAN保留了每一步的计算结果,而非仅仅返回最终值。

在销售数据分析中,SCAN的中间结果非常有用。例如,显示每位销售员在每个季度末的“累计完成额”,可以直观看出业绩的增长趋势。
5.3 累计分析实战
结合业务理解,假设“累计增长”列需要展示“相比上一年度同期的增长额”。假设上年度Q4为固定值80000:
=MAP(BYROW(B2:E21,LAMBDA(row,SUM(row))),LAMBDA(total,total-80000))
这行公式计算每位销售员的年度总额与基准值80000的差值,正数表示增长,负数表示下降。

六、实战建议:什么场景用什么函数
掌握函数的语法只是第一步,真正的高手在于能够根据业务场景快速选择最合适的工具。以下是经过实战验证的决策树:
第一步:明确输入输出的维度关系。
• 如果输入二维数组、输出单列结果,选择BYROW • 如果输入二维数组、输出单行结果,选择BYCOL • 如果输入数组、输出同尺寸数组,选择MAP • 如果需要生成全新结构的数组,选择MAKEARRAY
第二步:判断是否需要迭代累计。
• 只需要最终累计值,选择REDUCE • 需要所有中间步骤的结果,选择SCAN
第三步:确定LAMBDA的参数设计。
• BYROW/BYCOL的LAMBDA参数是“子数组” • MAP的LAMBDA参数是“单个元素” • REDUCE/SCAN的LAMBDA参数是“累计器”和“当前值”
在实际工作中,这七个函数很少单独使用。它们往往以组合形式出现:BYROW+MAP处理条件判断,SCAN+BYROW生成累计报表,MAKEARRAY+MAP构建计算矩阵。理解每个函数的能力边界,才能在复杂场景中灵活组合。
回到本文的销售数据批量处理系统案例:年均季度用BYROW计算,达标判断用MAP实现,累计增长用REDUCE完成——三个公式,三种维度,共同构成了一套完整的销售数据分析方案。这正是动态数组函数的魅力所在:用声明式的语法,处理命令式的逻辑;以少量的公式,应对海量的数据。
📚 配套学习资料免费领
评论回复:动态数组函数
点击公众号菜单「函数教程」,获取教程。
往期推荐
| AND | BYCOL | BYROW | FALSE |
| IFERROR | IFNA | IFS | LAMBDA |
| NOT | OR | REDUCE | SCAN |
| TRUE | XOR | MAP | MAKEARRAY |
| IF | LET | SWITCH |
夜雨聆风