Excel数组公式从入门到实战:动态数组与旧版三键输入全解析
2026/9/19 14:08:42 网站建设 项目流程

很多人在 Excel 表格里看到别人写的公式长成这样:{=SUM(A2:A10*B2:B10)},第一反应往往是“这什么写法,看不懂,先划走”。这种反应不奇怪,因为数组公式的显示方式、输入方式和普通公式完全不同,尤其是老版本 Excel 里还要按住 Ctrl+Shift+Enter 三个键,稍不注意就报错。

但数组公式本身并不难。它解决的是一类真实需求:让公式一次性处理一组数据,而不是一个单元格。日常办公里“单价乘数量求总金额”“统计某个部门符合条件的订单数”“把一列姓名合并成一行”这些场景,都能用数组思维快速解决。

这篇文章会先讲清楚数组在 Excel 里到底是什么,再区分新版和旧版 Excel 的不同操作方式,然后通过一个最小案例带你把数组公式亲手输入一遍,并用 F9 调试公式的中间结果。最后给出多条件统计、不重复计数、文本合并等高频率场景公式,以及一版可以直接对照排查的报错表。读完以后,你再看到带花括号的公式,至少能判断它到底做了什么,而不是直接划走。

1. 先搞懂 Excel 里的“数组”到底指什么

1.1 数组:一组数据被当成一个整体处理

Excel 里普通公式的对象是一个单元格。比如=A2*B2,它只处理 A2 和 B2 这两个单元格。数组不同,数组是一组数据打包在一起,公式对这组数据同时进行相同的运算。

举个例子。下面这张表:

商品单价数量
键盘1992
鼠标895
显示器10991
摄像头1293

如果按普通思路计算总金额,需要先加一列“金额”,在 E2 写=C2*D2,下拉到 E5,最后再=SUM(E2:E5)。整个过程需要引入一个辅助列。

数组公式的思路是跳过辅助列,直接让“单价区域”和“数量区域”按位置一对一相乘,然后交给 SUM 求和:

=SUM(C2:C5*D2:D5)

这个公式里,C2:C5*D2:D5会生成一组临时结果:398、445、1099、387。这组结果只存在于 Excel 内存中,没有写在任何单元格里,所以被称为“内存数组”。SUM 再把这一组结果累加,得到 2329。

这里的核心转变是:你把“两列数据相乘”当成一个整体操作交给了公式,而不是手工逐行计算。数组公式的威力就是来自这种“批量处理”。

1.2 老版本为什么要按 Ctrl+Shift+Enter

在老版本 Excel(Excel 2019 及更早版本)中,公式要返回多个值或进行数组运算时,Excel 无法自动判断这是一个数组公式,所以要求用户用 Ctrl+Shift+Enter 三个键结束输入。输完以后,编辑栏和单元格里会出现花括号:

{=SUM(C2:C5*D2:D5)}

注意一个关键点:花括号是 Excel 自动加上的,不是手输进去的。如果你手打花括号,Excel 会把整个内容当成文本处理,公式不生效。

这也是数组公式劝退很多人最大的原因:普通公式输入完按回车就行,数组公式却要按三个键;修改公式后还要再按一次三键,否则结果不变。这个交互习惯和普通公式差异太大,导致很多人觉得“数组公式很复杂”。

以上是老版本的情况。从 Excel 2021 和 Microsoft 365 开始,情况发生了变化。

1.3 动态数组:新版 Excel 的第二个阶段

新版 Excel 引入了动态数组机制。公式返回多个结果时,会自动“溢出”到相邻单元格,不再需要选中区域,也不需要按 Ctrl+Shift+Enter。

比如在新版 Excel 中,直接在 D2 输入:

=C2:C5*D2:D5

按回车后,D2、D3、D4、D5 会同时出现结果。这种自动填充到多个单元格的效果,就是“溢出”。

动态数组下拉带来两个实用变化:

  • 输入数组公式像输入普通公式一样简单,回车即可。
  • 新增了 FILTER、UNIQUE、SORT、SEQUENCE 等专为数组设计的函数,很多原本很复杂的“提取”“去重”“排序”问题,一个函数就能完成。

这也是为什么后面会反复强调版本问题。同样的思路,在新版 Excel 和旧版 Excel 中的写法完全不同。

2. 动笔前先确认自己用的 Excel 版本

2.1 不同版本对数组公式的支持差异

写数组公式之前,先确认自己用的 Excel 版本,否则会出现“我明明按教程写了公式,为什么结果不对”的问题。不同版本对数组公式和处理方式差异很大:

能力Excel 2021 / Microsoft 365Excel 2019 / 2016WPS 表格
动态数组自动溢出支持不支持部分支持,以实际版本为准
FILTER、UNIQUE、SORT、SEQUENCE支持不支持部分支持
TEXTJOIN 文本合并支持Excel 2019 支持,2016 不支持部分支持
传统 CSE 数组公式支持支持支持

判断方法很简单:随便找一个空单元格输入:

=A1:A3

如果回车后多个单元格同时出现 A1、A2、A3 的内容,说明你的版本支持动态数组;如果只显示 A1 的内容,说明当前版本是旧版行为。

这个判断很关键,直接决定你后面是按回车还是按三键。

2.2 老版本环境下的兼容写法

如果你用的是 Excel 2019 或更早版本,或者需要给这类同事发送工作簿,建议优先使用 SUMPRODUCT 函数。SUMPRODUCT 天生就支持数组运算,不需要按 Ctrl+Shift+Enter。

比如统计“销售一部”的订单数,老版本数组公式是:

{=SUM((A2:A10="销售一部")*1)}

但更稳妥的写法是:

=SUMPRODUCT((A2:A10="销售一部")*1)

效果完全一样,却省去了三键输入。同理,多条件求和中,SUMPRODUCT 也比传统数组公式更容易维护。

这里给一个经验判断:如果你的工作场景要求表格在多个版本的 Excel 中兼容,尽量用 SUMPRODUCT 代替需要按三键的 SUM 数组公式。这样同事打开文件时不会因为忘按三键而算出错误结果。

2.3 新版本里容易踩的 @ 和溢出问题

新版 Excel 虽然方便,但有两个新坑需要注意。

第一个坑是 @ 隐式交集。当你在新版 Excel 中打开一个旧版数组公式时,Excel 可能会自动在公式前面加上 @,把原来的数组运算变成“只取第一个值”。

例如旧版公式:

=SUM(C2:C5*D2:D5)

在新版中显示时可能变成:

=SUM(@C2:C5*D2:D5)

结果就只计算了第一行数据,导致金额变小。遇到这种情况,要检查公式里是否被自动加了 @,如果有,删掉 @ 再回车。

第二个坑是 #SPILL! 错误。新版公式返回多个结果时,如果目标单元格旁边的区域已经有内容,Excel 会报 #SPILL!,意思是结果溢出的地方被占用了。清空目标区域即可,或者用 INDEX 只取结果中的某一部分。

这两种报错都是在旧版 Excel 中不存在的新问题。这也是为什么说明版本非常重要:用新版的思路去操作旧版会报错,用旧版的习惯写新版公式也可能出错。

3. 最小上手案例:一次算完“单价乘数量”

3.1 数据准备:一张最简单的商品表

为了把数组公式跑通,先准备一张最简单的表。打开 Excel,在 A1:D5 区域输入:

商品单价数量金额
键盘1992
鼠标895
显示器10991
摄像头1293

这张表的目的是计算每种商品的金额,以及总计金额。先不要手工在 D 列填写公式,后面用数组公式一次性完成。

3.2 数组求和:把中间步骤交给内存

在 D2 单元格输入下面这个公式,完成“单价乘数量再求和”:

=SUM(C2:C5*D2:D5)

注意,这里 C 列是单价,D 列是数量,但我在前面表格里把 D 列预留给“金额”列了。为了不产生歧义,把公式写清楚:

=SUM(B2:B5*C2:C5)

其中 B2:B5 是单价,C2:C5 是数量。

输入完成后,根据版本选择结束方式:

  • 新版 Excel 或支持动态数组的版本:直接按回车。
  • 旧版 Excel:按 Ctrl+Shift+Enter。

如果看到公式两边出现花括号:

{=SUM(B2:B5*C2:C5)}

说明数组公式输入成功。

这里要解释一下执行过程。Excel 会先计算B2:B5*C2:C5,也就是:

  • 199 * 2 = 398
  • 89 * 5 = 445
  • 1099 * 1 = 1099
  • 129 * 3 = 387

然后 SUM 把 398、445、1099、387 相加,得到 2329。

如果你在 D2 输入公式后返回 2329,说明数组公式已经成功运行。

3.3 理解中间结果:一组数据经过运算变成一组新数据

这一步是理解数组公式的关键。B2:B5*C2:C5不是一个值,而是一组值。它就像一条流水线,左边进来一列单价,右边进来一列数量,中间逐个相乘,出口出来一列新的数字。

可以在一个空白区域验证这个说法。选择 F2:F5,输入:

=B2:B5*C2:C5
  • 新版 Excel:直接回车,F2 到 F5 自动填充结果 398、445、1099、387。
  • 老版 Excel:先选中 F2:F5,输入公式后按 Ctrl+Shift+Enter,同样会出现四个结果。

这组临时结果就是“内存数组”。数组公式的本质,就是这种“一组数据按位置一一对应运算”的机制。理解了这一步,就理解了 80% 的数组公式。

4. 用 F9 把数组公式拆开,逐段看结果

4.1 调试操作:在编辑栏选中公式片段再按 F9

很多数组公式写出来结果不对,但肉眼很难发现问题。这时候最有效的调试方法就是 F9。

操作步骤很简单:

  1. 选中包含公式的单元格。
  2. 进入编辑栏,用鼠标选中公式中的某段,比如B2:B5*C2:C5
  3. 按键盘上的 F9 键。
  4. Excel 会显示这一段计算出来的结果。

例如选中B2:B5*C2:C5后按 F9,会看到:

{398;445;1099;387}

这表示这一段公式已经正确计算出了四个结果。如果看到这个结果,说明问题不在乘法,而是在外层函数或区域引用上。

同样的方式也可以检查条件判断。比如公式里有一句A2:A6="销售一部",按 F9 后会看到:

{TRUE;FALSE;TRUE;FALSE;TRUE}

这些 TRUE 和 FALSE 就是数组中每个元素进行判断的结果。

4.2 排查顺序:从中间值倒推问题位置

F9 调试法有一个固定的排查顺序,建议按照从内到外、从条件到结果的顺序进行:

  1. 先检查条件区域是否返回了正确的 TRUE/FALSE 数组。
  2. 再检查运算区域是否返回了正确的数值数组。
  3. 然后检查两个数组相乘后是否得到了 0、1 或错误值。
  4. 最后看外层 SUM 或 SUMPRODUCT 是否把中间结果正确汇总。

如果中间值出现这些情况,要能判断病因:

F9 结果可能的含义
{#VALUE!;0;1}区域大小不一致,或文本型数字参与运算
{FALSE;TRUE;FALSE}条件判断本身没问题,但还需要参与数值运算
{0;0;0}条件全部不满足,或区域引用错位
{#N/A;1;2}公式中存在查找类函数,某些值找不到
{1;1;0}条件匹配成功,但需要确认是不是多个条件逻辑正确

F9 是数组公式最好的“透视镜”。它能让你看到公式在每一个位置上的临时结果,而不是只有一个抽象的总数。

4.3 常见调试坑:F9 之后不要直接回车

F9 调试有一个非常容易踩的坑:查看完中间结果后,如果按了回车,公式会被临时结果替换掉。

举例来说,你选中B2:B5*C2:C5后按 F9,如果这时直接回车,公式可能变成:

=SUM({398;445;1099;387})

原来的区域引用全部消失了,换成了硬编码的数字。以后原始数据一改,这个公式不会跟着更新。

正确做法是:查看完 F9 的结果后,按 Esc 退出编辑状态,这样临时结果只是显示出来供你观察,不会写入公式。

注意:F9 会把选中片段的计算结果直接写进公式。查看完中间结果后,一定要按 Esc 退出编辑状态,不要按回车。

5. 三个高频场景,直接拿去用

5.1 多条件统计:用 * 代替 AND

这是数组公式最实用的场景之一。比如要根据“部门”和“金额”两个条件统计订单数。

数据结构如下:

部门订单金额
销售一部800
销售二部1200
销售一部1500
销售二部600
销售一部2000

统计“销售一部”且“订单金额大于 1000”的订单笔数:

=SUM((A2:A6="销售一部")*(B2:B6>1000))

新版直接回车,旧版按 Ctrl+Shift+Enter;或者直接用 SUMPRODUCT 写法:

=SUMPRODUCT((A2:A6="销售一部")*(B2:B6>1000))

运算过程是这样的:

  • 第一段A2:A6="销售一部"得到{TRUE;FALSE;TRUE;FALSE;TRUE}
  • 第二段B2:B6>1000得到{FALSE;TRUE;TRUE;FALSE;TRUE}
  • 两个数组相乘后得到{0;0;1;0;1}
  • SUM 累加得到 2

这里最容易掉的坑是用 AND 代替 *:

=SUM(AND(A2:A6="销售一部",B2:B6>1000))

这样写大概率会返回错误结果。原因在于 AND 函数会把整个数组当成一个整体来判断,只返回一个 TRUE 或 FALSE,而不是逐行返回一组 TRUE/FALSE。在数组公式中,需要逐条判断的场景必须用*连接条件。

5.2 不重复计数:新旧版本两种写法

统计“不重复客户数量”是另一个高频需求。

数据如下:

客户
张三
李四
张三
王五
李四

新版 Excel 直接使用 UNIQUE 配合 COUNTA:

=COUNTA(UNIQUE(A2:A6))

UNIQUE 会返回不重复客户列表{"张三";"李四";"王五"},COUNTA 统计非空数量得到 3。

旧版 Excel 没有 UNIQUE,只能使用经典数组公式:

=SUMPRODUCT(1/COUNTIF(A2:A6,A2:A6))

这个公式的原理是利用了“倒数求和”的思路:每个客户出现 n 次,COUNTIF 就返回 n,1/n 这组数据加起来正好是 1。比如“张三”出现 2 次,贡献 1/2+1/2=1;“李四”出现 2 次,也是贡献 1,三个客户合计 3。

这个公式巧妙,但不好记忆,而且当数据量很大时计算会变慢。如果你的版本支持 UNIQUE,优先用 UNIQUE,它们解决的问题是一样的:计算不重复项数量。

5.3 一列数据按逗号合并:TEXTJOIN 与数组思维

日常办公中经常要把一列姓名、编号或邮箱合并到一行,用逗号隔开。

Excel 2019 及以上版本可用 TEXTJOIN:

=TEXTJOIN(",",TRUE,A2:A10)

第一个参数是分隔符,第二个参数 TRUE 表示忽略空白单元格,第三个参数是要合并的区域。

这里没有用到 Ctrl+Shift+Enter,但它体现的仍然是“把区域当成整体处理”的数组思维。Excel 遍历 A2:A10 的每一个单元格,将它们按逗号拼接成一个文本。

如果是 Excel 2016 老版本,没有 TEXTJOIN 函数,可以用 VBA 或者把数据转置后合并,但操作明显更繁琐。这个例子也说明:新函数出现后,很多原本需要复杂数组公式解决的问题,已经变成了一个函数调用。

6. 常见报错与排查路径

6.1 现象速查表

数组公式的报错种类不多,但每种都很容易让人迷惑。把常见现象整理成表格,直接对照排错:

问题现象常见原因检查方式处理建议
公式结果不对,且没有出现花括号老版本未按 Ctrl+Shift+Enter查看编辑栏公式是否被花括号包裹重新进入编辑状态并按下三键
出现 #VALUE! 错误数组区域大小不一致,或文本型数字参与运算用 F9 查看中间结果统一区域范围;将文本数字转成数值
出现 #SPILL! 错误新版公式结果要溢出,但目标区域被占用检查目标单元格旁边是否有内容清空溢出区域,或使用 INDEX 限制结果范围
多条件统计结果全部为 0条件区域与统计区域错位检查区域引用是否指向正确列确保多个数组的行数完全一致
用 AND 连接条件后结果不对AND 不会逐行计算,而是返回单个结果把公式拆开按 F9 查看*代替 AND
结果只有第一行数据新版 Excel 自动加了 @ 隐式交集检查公式里是否多出 @ 符号删除 @,确认使用动态数组功能

6.2 为什么数组区域大小必须一致

数组公式的运算规则要求:参与运算的多个数组必须具有相同的行数和列数。

比如C2:C5*D2:D5是两个 4 行 1 列的数组,可以按位置相乘。但如果写成C2:C5*D2:D6,一个是 4 行,一个是 5 行,Excel 无法确定 C2 是和 D2 对齐还是和 D6 对齐,就会返回 #VALUE!。

排查这类问题的方法还是 F9。选中出错公式中的某个区域,按 F9 查看它返回了几个值。如果两个区域返回的数组长度不一致,基本可以确定是区域错位。

6.3 为什么条件区域和统计区域会错位

多条件统计中还有一个隐藏问题:两个条件明明都成立,但结果却是 0。

原因通常是两个条件引用的区域没有对齐。例如统计“销售一部”且“金额大于 1000”的订单数,却写成:

=SUMPRODUCT((A2:A6="销售一部")*(B3:B7>1000))

A 列从第 2 行开始,B 列从第 3 行开始,两边的判断对象错开了一行。Excel 不会报错,但计算结果没有任何意义。

数组公式要求所有关联条件必须基于同一行进行判断。写公式时,先检查每个区域的行号是否一致。这是数组公式最容易排查、也最容易忽略的问题。

7. 最佳实践:让数组公式稳定、可维护、兼容

7.1 学习环境与工作文件的差异

学习数组公式和正式写进工作文件,要求完全不同。

学习阶段可以大胆尝试:新建一个空白工作簿,随便造几行数据,使用新版动态数组的 FILTER、UNIQUE、SORT 函数,用 F9 反复查看中间结果。这时候不用太在意性能,重点是理解内存数组和运算规则。

但正式工作文件就要谨慎得多:

  • 确认团队其他人使用的 Excel 版本,避免写出只有你电脑能显示的公式。
  • 涉及关键统计的数组公式,建议在旁边加一个普通公式或辅助列做交叉验证。
  • 正式文件中的数据量可能达到几万行,数组公式数量较多时,表格会明显变慢,要评估是否值得。

注意:数组公式不是万能的。如果工作簿需要在旧版 Excel 中打开并持续使用,优先考虑 SUMPRODUCT 或辅助列,再考虑数组公式。

7.2 什么时候不要用数组公式

数组公式虽然强大,但并非所有场景都适合使用。以下几种情况建议换用其他方案:

第一,数据量极大时。几万行数据参与数组运算,每次重新计算都需要遍历整个区域,表格会变得异常卡顿。此时应该尽量使用透视表或数据库,而不是在单元格里硬算。

第二,需要频繁修改公式时。数组公式修改后容易忘记按三键,容易在团队协作中埋下隐患。如果条件经常变化,辅助列加普通函数是更稳定的选择。

第三,涉及“几个数相加凑成一个数”这类组合搜索问题。有些用户想在 Excel 里实现“从一堆数字中找出哪些相加等于某个值”,数组公式虽然可以做两两组合,但数字一多计算量会指数增长,而且公式极难维护。这类问题用规划求解或 Python 脚本更合适,而不是硬写数组公式。

7.3 数组公式使用前检查清单

写数组公式前,可以用下面这份清单过一遍:

  • 确认当前 Excel 版本是否支持动态数组。
  • 确认所有参与运算的数组区域行数和列数一致。
  • 确认文本型数字已经转为数值类型。
  • 确认条件区域和统计区域从同一行开始。
  • 确认多个条件使用*连接,而不是 AND。
  • 确认旧版环境下是否应该改用 SUMPRODUCT。
  • 确认新版公式没有多余的 @ 符号。
  • 确认公式返回多个结果时,目标溢出区域没有其他内容。
  • 用 F9 检查过关键片段的中间结果。
  • 正式文件里,用辅助列或普通公式交叉验证一次结果。

这套清单可以当成个人笔记,也可以贴在表格旁边当公式审查标准。

7.4 建议的学习路径

数组公式入门不需要一次性掌握所有函数,建议按下面的顺序练习:

  1. 先用SUM(B2:B5*C2:C5)理解“内存数组”概念。
  2. 再用SUM((条件区域="条件")*1)练习条件计数。
  3. 用 SUMPRODUCT 做多条件求和,体会兼容写法。
  4. 新版用户直接学习 FILTER、UNIQUE、SORT、SEQUENCE 这一组动态数组函数。
  5. 最后再看 INDEX+SMALL+IF 这类老版本复杂写法,理解它们的原理即可,不必作为主要工具。

数组公式真正的门槛不在数学,而在输入习惯和对内存数组的理解。把最小案例亲手输入一遍,再用 F9 看一次中间结果,Excel 数组就不再是“看到就想划走”的知识点。日常办公里 80% 的统计和提取需求,都可以用这套思维解决。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询