乐于分享
好东西不私藏

再也不怕 Excel 公式报错!AGGREGATE 函数一招搞定复杂统计

再也不怕 Excel 公式报错!AGGREGATE 函数一招搞定复杂统计

这里有最实用的Excel使用技巧,通过提高Excel技能,可以让你轻松应对工作中的表格处理,提高你的工作效率!

上期讲了 SUBTOTAL,能自动忽略隐藏行,财务对账、库存盘点省了不少时间。

但有个问题——SUBTOTAL 遇到错误值就罢工。比如某列数据中某个单元格是#DIV/0! 或者#N/ASUBTOTAL 直接返回错误,拿它一点办法都没有。

还有更头疼的场景:你要对筛选后的数据取第二大值、算中位数、或者做乘积求和,SUBTOTAL 根本做不到。

今天的主角 AGGREGATE 函数,Excel 2010 及以上版本内置,可以把它理解成 SUBTOTAL 的完全进化体——能干 SUBTOTAL 能干的所有事(忽略隐藏行 + 求和/计数/平均),还能干它干不了的事(忽略错误值 + 19种函数 + 数组运算)。

一、AGGREGATE 是什么?

一句话说清楚:

AGGREGATE = SUBTOTAL 的完全进化版,多了「忽略错误值」和「19种函数」两项超能力

基础语法:

=AGGREGATE(功能码, 忽略选项, 数据区域)

功能码表(共19种):

功能码

对应函数

说明

亮点

1

AVERAGE

平均值

2

COUNT

计数

3

COUNTA

非空计数

4

MAX

最大值

5

MIN

最小值

9

SUM

求和

 最常用

12

MEDIAN

中位数

 SUBTOTAL无

13

MODE.SNGL

众数

 SUBTOTAL无

14

LARGE

第k个最大值

 SUBTOTAL无

15

SMALL

第k个最小值

 SUBTOTAL无

16-19

PERCENTILE等

百分位/四分位

 SUBTOTAL无

忽略选项表(共8种):

选项码

效果

推荐场景

0/4

什么都不忽略

跟普通函数一样

1/5

忽略隐藏行

类似SUBTOTAL(101-109)

2/6

忽略错误值

 SUBTOTAL做不到

3/7

忽略隐藏行+错误值

⭐⭐ 最强组合,推荐

💡建议直接用选项码 3  7——忽略隐藏行+忽略错误值,一招通吃所有情况。

二、实战场景

场景1:销售报表——数据有错误值也能求和

痛点

你有一张销售日报表,有的地区数据还没到齐,填了#N/A。有的销售员录了个#DIV/0!的公式忘改了。你想求和,但SUM遇到错误值直接返回#N/A,整个汇总行都是红的。换成SUBTOTAL?它也一样。难道要手动一个个去删?

示例数据

日期

区域

销售员

当日销售额

7/1

华东

张三

12500

7/1

华南

李四

#N/A

7/1

华北

王五

8200

7/1

西南

赵六

#DIV/0!

7/1

华东

钱七

15000

7/1

华南

孙八

9800

7/1

华北

周九

#N/A

7/1

西南

吴十

11300

公式:=AGGREGATE(9, 6, D2:D9)

结果:56,800(只加有效数字,跳过了 #N/A 和 #DIV/0!)

如果用 SUM:=SUM(D2:D9) → #N/A(一个错误值就全部完蛋)

分析:选项码=6(或选项码=2),遇到 #N/A#DIV/0!#VALUE! 等错误值统统跳过。普通函数和SUBTOTAL遇到错误值会直接传染,整个结果都变错误。AGGREGATE是唯一内置「遇错跳过」功能的统计函数。这在财务报表核对场景下尤其好用——当上游数据还有空位时,你照样可以出一个「已有数据的汇总」。

┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

场景2:竞赛评分——忽略隐藏行算平均分

痛点

公司搞技能大赛,专家评委打分。有的评委特别仁慈(打分偏高),有的特别严格(打分偏低)。更麻烦的是,有的评委评分列被隐藏了,但AVERAGE不会自动忽略隐藏列。

示例数据

选手

评委1

评委2

评委3

评委4

评委5

评委6

评委7

小王

85

92

78

95

88

91

96

小李

90

85

92

88

84

87

91

公式:=AGGREGATE(1, 3, B4:H4)

结果:忽略被隐藏的评委评分列后,对可见列求平均分。

分析:选项码=3(忽略隐藏行+忽略错误值),评委评分数据再乱也不怕。注意功能码 1 对应 AVERAGE,加上选项码之后,隐藏的列不会进计算。

┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

场景3:销售排名——筛选后取第2名,错误值不影响

痛点

销售排行榜上,有的销售员数据异常(填了#N/A表示未出单),你想在筛选「只看华东区」后,找出销售额第二高的销售员。以前你得一步步清除错误值→筛选→LARGE——三步走,现在AGGREGATE一步到位。

示例数据

姓名

区域

销售额

张三

华东

12500

李四

华东

#N/A

王五

华北

8200

赵六

华东

15000

钱七

华东

#DIV/0!

孙八

华东

9800

周九

华北

11300

公式:=AGGREGATE(14, 3, C2:C8, 2)

结果:筛选「华东」后 → 9,800(第2高;最高是15,000

分析:功能码14对应LARGE,取第k大值。选项码=3同时忽略隐藏行和错误值。换成SUBTOTAL:可以忽略隐藏行,但遇到#N/A直接罢工。换成LARGE:遇到#N/A罢工,且不会因为筛选自动调整范围。AGGREGATE是唯一一个同时搞定「数组运算 + 忽略隐藏 + 跳过错误」的通用函数。

┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

场景4:月度费用统计——中位数比平均值更真实

痛点

老板问:「上个月部门报销费用的中位数是多少?」平均值容易被极端值拉偏(比如有人报了10万的大单),但中位数能真实反映「普通员工的报销水平」。SUBTOTAL没有MEDIAN功能码,但AGGREGATE有(功能码12)。

示例数据

姓名

部门

报销金额

张三

市场部

3200

李四

技术部

860

王五

市场部

1800

赵六

财务部

230

钱七

市场部

102000

孙八

技术部

2600

周九

财务部

1500

公式:=AGGREGATE(12, 3, C2:C8)

结果:1,800(中位数——钱七的10万大单被自动自然排除)

如果用AVERAGE算平均:102,000+...+230 = 16,027(被钱七一个人拉高了近9倍)

分析:AGGREGATE的功能码12-19(中位数、众数、百分位数、四分位数)是SUBTOTAL根本做不到的。对于财务分析来说,中位数经常比平均值更有参考价值——尤其是在报销、薪酬、采购单价等极端值较多的数据中。

三、Python 版:大数据量的 AGGREGATE 效果

现实中的财务数据,往往不止十几行,而是几万行、几十万行。Excel的AGGREGATE函数用在大数据量上,卡顿是迟早的事。这时候上Python:

import pandas as pdimport numpy as np# 读取数据df = pd.read_excel('销售数据.xlsx')# 模拟 AGGREGATE(9, 6) 的效果:求和,跳过错误值total = df['销售额'].sum()# 自动忽略NaN# 模拟 AGGREGATE(14, 3, ..., 2) 取第2大df_east = df[df['区域'] == '华东']second_highest = df_east['销售额'].nlargest(2).iloc[-1]# 模拟 AGGREGATE(12, 3) 中位数median_value = df_east['销售额'].median()

一行搞定AGGREGATE的效果:.sum() / .median() / .nlargest() 在pandas中默认忽略NaN,而且Python不卡,50万行数据照跑不误。

四、AGGREGATE vs SUBTOTAL 对比总结

对比项

SUBTOTAL

AGGREGATE

功能码数量

11个

19个

忽略错误值

 不支持

 选项码2/3/6/7

忽略隐藏行

 功能码101-109

 选项码1/3/5/7

中位数/众数

 没有

 功能码12/13

LARGE/SMALL

 没有

 功能码14/15

百分位/四分位

 没有

 功能码16-19

数组运算

 不支持

 支持

兼容版本

所有版本

Excel 2010+

一句话选哪个:只要忽略隐藏行就够了 → SUBTOTAL(更简单);需要忽略错误值或需要中位数/LARGE/SMALL → AGGREGATE

下期预告:你知道Excel里还有一个叫SUBTOTAL和AGGREGATE的「近亲」吗?它叫SUMPRODUCT——一个函数顶十个,条件求和、加权平均、多条件计数一把抓。敬请期待。

附:长期坚持原创不易,如文章能够为大家带来少少帮助的,请大家点赞并转发,以支持我继续分享创作,你的支持将是我的不竭动力!谢谢!

(本文为本公众号原创,未经允许和授权,严禁转载,违者必究)