还在手动把公式拖拽到几百行?还在为数据增加后公式范围不够用而头疼?动态数组来了之后,这些事可以省一省了。

动态数组的核心机制很简单:一个公式,一次回车,结果自动“溢出”到相邻单元格。数据源变了,结果自动跟着变。再也没有Ctrl+Shift+Enter,没有下拉填充。今天把几个最常用的动态数组函数过一遍。

一、基础四件套:UNIQUE、SORT、FILTER、SEQUENCE

这四个函数是动态数组的入门标配,也是日常工作中用到最多的。

UNIQUE —— 提取不重复值

=UNIQUE(A2:A100)

一键提取A列所有不重复值,自动溢出到下方单元格。不用辅助列,不用数组三键,不用去重按钮。

进阶用法:提取多列组合的唯一值

=UNIQUE(A2:B100)

返回A列和B列组合后的唯一行。

SORT / SORTBY —— 动态排序

=SORT(A2:C100, 3, -1)

对A2:C100按第3列降序排序-33。数据更新,排序结果自动刷新。

SORTBY更灵活——按另一个区域排序:

=SORTBY(A2:C100, B2:B100, 1, C2:C100, -1)

先按B列升序,同值再按C列降序。

FILTER —— 条件筛选

=FILTER(A2:C100, C2:C100>10000, "无记录")

筛选出C列大于10000的所有行。第三个参数是“没找到时显示什么”,可以不加。

多条件筛选:

=FILTER(A2:C100, (B2:B100="销售部")*(C2:C100>5000))

筛选销售部且工资大于5000的记录。

SEQUENCE —— 生成序列

=SEQUENCE(10)        // 生成1到10的垂直序列
=SEQUENCE(5, 3)      // 生成5行3列的序列
=SEQUENCE(10, 1, 0, 2) // 从0开始步长2:0,2,4,6...

生成连续数字序列,常用于构造辅助数组。

组合使用:把三个函数套在一起

=SORT(UNIQUE(FILTER(A2:A100, B2:B100="已完成")))

筛选“已完成”的项目名称→去重→按字母排序-。

二、数组操作:VSTACK、HSTACK、CHOOSECOLS、TAKE、DROP

处理多区域数据时,这几个函数能把零散数据拼成一张完整的表。

VSTACK —— 纵向堆叠

=VSTACK(A2:C10, A15:C20)

把两个区域上下拼接成一个数组-。常用于合并多个月份/部门的数据。

HSTACK —— 横向拼接

=HSTACK(A2:A10, D2:D10)

把两列左右拼接-。常用于把不同来源的列合并到一起。

CHOOSECOLS —— 按需取列

=CHOOSECOLS(A2:F100, 1, 3, 5)

只取第1、3、5列,其他扔掉-33。数据透视前的“瘦身”利器。

TAKE / DROP —— 掐头去尾

=TAKE(A2:C100, 5)     // 取前5行
=DROP(A2:C100, 5)     // 去掉前5行

TAKE保留指定数量的行/列,DROP删除指定数量的行/列-。常用于去掉标题行或只取最新N条记录。

三、高级迭代:SCAN、REDUCE、MAKEARRAY

SCAN —— 带“记忆”的遍历

合并单元格填充是SCAN的经典场景:

=SCAN("", B2:B9, LAMBDA(a, b, IF(b="", a, b)))

遍历B2:B9,遇到空单元格就用上一个非空值填充。一次性把合并单元格补全。

REDUCE —— 归约计算

把数组“折叠”成一个值:

=REDUCE(0, A2:A100, LAMBDA(a, b, a+b))

遍历A2:A100,把每个值累加到初始值0上。相当于自己写了一个SUM。

MAKEARRAY —— 按规则生成矩阵

=MAKEARRAY(5, 3, LAMBDA(r, c, r*10+c))

生成5行3列,每个单元格的值由行号和列号计算得出-。需要自定义矩阵时非常灵活。

四、行/列遍历:BYROW、BYCOL

BYROW —— 逐行处理

=BYROW(E2:G100, SUM)

对每一行求和,返回每行的合计-。用LAMBDA做更复杂的行内计算:

=BYROW(B2:D100, LAMBDA(row, MAX(row)-MIN(row)))

每行最大值减最小值。

BYCOL —— 逐列处理

=BYCOL(B2:F100, SUM)

对每一列求和。

五、函数版透视表:GROUPBY、PIVOTBY

这两个函数是2026年Excel的重磅更新,被称为“函数版数据透视表”。

GROUPBY —— 分组汇总

=GROUPBY(A2:A100, C2:C100, SUM)

按A列分组,对C列求和-。数据更新,结果自动刷新——透视表还得手动点刷新,它不用。

PIVOTBY —— 分组+交叉汇总

=PIVOTBY(A2:A100, B2:B100, C2:C100, SUM)

A列做行标签,B列做列标签,C列求和。一个公式生成完整的交叉汇总表。

六、一个必须掌握的技巧:# 溢出引用

动态数组返回的结果是一个“溢出范围”。如果想在其他公式中引用这个范围,在源单元格后面加#就行。

假设A1输入了=UNIQUE(B2:B100),结果溢出了A1:A20。想对结果求和:

=SUM(A1#)

无论溢出范围是10行还是100行,SUM都会自动覆盖全部-。配合FILTER、SORT用尤其顺手。

七、常见错误与避坑

  1. #SPILL!错误:溢出区域被其他内容挡住了。把挡住的东西移开就行。
  2. 公式放在表格(Table)内部:动态数组公式不能放在Excel表格的单元格里,必须在表格外部写。
  3. #VALUE!或#CALC!:LAMBDA里的参数写错了,检查一下参数个数和引用范围。

动态数组带来的最大改变是思维方式的转变——从一个格子一个格子地填公式,变成用一个公式描述一整片区域的逻辑-。数据变了,结果自动变;数据多了,结果自动扩。不用维护公式范围,不用手动更新报表-。这六个类别的函数基本覆盖了日常工作的大部分场景,剩下的就是遇到具体问题时,想想“哪个函数能帮我一次搞定”。