乐于分享
好东西不私藏

做了3年运营报表才知道,Excel动态数组函数才是真正的偷懒神器

做了3年运营报表才知道,Excel动态数组函数才是真正的偷懒神器

大家好,我是沈未迟。

不知道你们有没有过这种经历——

每周一早上,老板要一份"各区域不重复客户名单"。我吭哧吭哧复制粘贴,点"删除重复值",完事了发现源数据又改了,得重来一遍。

月末做台账,主管说"把华东区金额大于5000的订单都挑出来"。我打开高级筛选,选条件区域,选复制位置,一步走错全白搭,筛完还得手动排序。

最崩溃的是做出库单模板,每行要自动编号。我用ROW函数往下拉,拉少了不够用,拉多了空行难看,删行的时候编号还会断……

那时候我以为Excel就这样了,手动去重、手动筛选、手动排序,这不是很正常吗?直到有次去总部培训,看见旁边的小姐姐只写了一个公式,哗啦一下自动出来一堆结果,改源数据那边自动跟着变。

我凑过去问:"你这用的啥?宏?VBA?"

小姐姐看了我一眼:"动态数组函数啊,你没用过?"

那天我感觉自己像个原始人。回来之后我把动态数组函数挨个啃了一遍,边啃边拍大腿——早知道有这些东西,我以前那些班都白加了!

今天这篇,我把动态数组家族里最实用的5个掏出来给你们唠唠。每个都配真实场景和我踩过的坑,看完你会发现:Excel居然可以这么"聪明"。

一、UNIQUE:提取不重复值,比删除重复值好用10倍

语法说明

UNIQUE(数据区域, [按行/按列], [只返回只出现一次的])

你给它一列数据,它自动把重复的去掉,把唯一值给你列出来。而且源数据变了它自动更新,不用你再操作一遍。

真实工作场景

场景1:提取不重复客户名单

A列是所有订单的客户名称,有重复。想知道一共有哪些客户:

=UNIQUE(A2:A1000)

输完按回车,所有不重复客户名都出来了。源数据加了新客户?它自动加进去。删了?它自动去掉。就这么智能。

场景2:多列组合去重

想知道"每个区域每个品类"有多少种组合?直接选多列:

=UNIQUE(A2:B1000)

A列是区域,B列是品类,返回两列的不重复组合。比数据透视表拖来拖去快多了。

我当年踩过的坑

刚用UNIQUE的时候,我犯过一个特别蠢的错误——结果会溢出,下面和右边不能有东西

有一次我在D1写了UNIQUE公式,结果#SPILL!报错。我纳闷半天,后来才发现D列下面有人写了备注。动态数组的结果会自动" spill(溢出)"到下方单元格,如果挡住了就报错。

所以用动态数组函数,记得给它留够空地儿。这是所有动态数组函数的共同特点。

二、FILTER:按条件筛选,比高级筛选强一万倍

语法说明

FILTER(要返回的数据区域, 条件, [找不到时返回什么])

你给它一个条件,它把符合条件的行都给你挑出来,自动列成一张表。而且也是动态更新的。

真实工作场景

场景1:按单条件筛选

老板说:"把华东区的所有订单都给我列出来。"

以前要开筛选、选华东、复制粘贴。现在一个公式:

=FILTER(A2:D1000, A2:A1000="华东")

回车,哗啦一下华东区所有订单整整齐齐列出来了。

场景2:多条件筛选

老板又说:"华东区、金额大于5000的,列出来。"

用乘号连接条件(就是"且"的意思):

=FILTER(A2:D1000, (A2:A1000="华东")*(C2:C1000>5000), "无符合条件的数据")

我特意加了第三个参数"无符合条件的数据",不然如果一条都没符合的,它会报#CALC!错误,老板看到以为我写错了。

我当年踩过的坑

FILTER有个坑我踩了好多次——条件区域的大小要和数据区域的行数一致

有一次数据是A2:A1000,我条件写的A2:A999,少了一行,结果直接#VALUE!报错。我查了半天,后来数行数才发现对不齐。

还有一个坑:多条件的时候,每个条件一定要用括号括起来。不然乘号的优先级比等号高,会先算乘法再算判断,结果就全乱了。

三、SORT / SORTBY:动态排序,改完数据自动重排

语法说明

SORT:按列排序

SORT(数据区域, [排序依据第几列], [升序1/降序-1])

SORTBY:按多列/自定义排序

SORTBY(数据区域, 排序依据列1, [升序1/降序-1], 排序依据列2, [升序1/降序-1], ...)

两个都是排序,但SORT是按数据里的某一列排,SORTBY可以按数据外面的列排,还能多列排序。日常用SORT多一些。

真实工作场景

场景1:按销售额降序排列

老板说:"把这些订单按金额从大到小排一下。"

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

第3列是金额,-1表示降序。回车,自动排好了。源数据改了金额?它自动重新排。

场景2:多列排序

先按区域排,同区域的按金额降序排:

=SORTBY(A2:D1000, A2:A1000, 1, C2:C1000, -1)

这就是数据透视表里的"多级排序",一个公式搞定。

我当年踩过的坑

SORT函数有个地方我刚开始特别懵——排序依据的列号,是相对于你选的数据区域的,不是工作表的列号

比如我选的是B2:D1000(B列到D列),想按D列排序。那D列在我选的区域里是第3列,所以第二参数写3,不是写4。

我第一次用的时候想当然写了4,结果按别的列排了,我还纳闷怎么排得不对。这个坑90%的人第一次用都会踩。

四、SEQUENCE:生成序列号,比ROW好用10倍

语法说明

SEQUENCE(行数, [列数], [起始值], [步长])

以前生成序列号用ROW函数往下拉。SEQUENCE不一样,你写一个公式,它自动给你生成一整列/一整块序列号。

真实工作场景

场景1:生成1到100的序号

=SEQUENCE(100)

就这么简单。一个公式,1到100全部出来了。不用往下拉,不用怕拉多了拉少了。

场景2:生成日期序列

生成2024年3月整月的日期:

=SEQUENCE(31, , "2024-3-1", 1)

做日历、做排班表、做日报模板的时候巨好用。

我当年踩过的坑

SEQUENCE有个坑我印象特别深——生成日期的时候,单元格格式要改成日期

第一次我用SEQUENCE生成3月份的日期,出来全是45352、45353这种数字,我以为公式错了。后来才反应过来,Excel里日期本来就是数字,只是显示成日期的样子。把单元格格式改成"日期"就正常了。

五、RANDARRAY:生成随机数数组

语法说明

RANDARRAY(行数, [列数], [最小值], [最大值], [是否整数])

以前生成随机数用RAND和RANDBETWEEN,RANDARRAY可以一次性生成一整片随机数。做模拟数据、抽奖、随机分组的时候特别好用。

真实工作场景

场景1:生成随机抽奖名单

公司年会抽奖,从200个员工里随机抽10个:

=INDEX(SORTBY(A2:A201, RANDARRAY(200)), SEQUENCE(10))

先用RANDARRAY生成200个随机数,SORTBY按随机数把人名打乱,然后取前10个。每次按F9刷新都会换一批人,绝对公平。

场景2:生成模拟测试数据

做报表模板需要测试数据,生成100行随机整数(1到100之间):

=RANDARRAY(100, , 1, 100, TRUE)

一秒钟生成100个测试数据,比手动输快到天上去了。

我当年踩过的坑

RANDARRAY有个特性我一开始没注意——它是易失性函数,每次改任意单元格、按F9、甚至打开文件,它都会重新计算,随机数会变。

有一次我用RANDARRAY生成了抽奖结果,去倒杯水回来,结果全变了,我人都傻了。

如果想让随机数固定下来,可以用"粘贴为值":选中结果 → Ctrl+C → 右键 → 粘贴为值。这样就不会变了。

组合实战:2个神级用法

单个函数已经很能打了,但真正的高手都是组合出招。分享两个我日常用得最多的组合拳。

组合1:FILTER + SORT = 条件筛选后自动排序

老板说:"把华东区金额大于5000的订单列出来,按金额从大到小排。"

以前先筛选再排序,现在套一起:

=SORT(FILTER(A2:D1000, (A2:A1000="华东")*(C2:C1000>5000)), 3, -1)

FILTER先把符合条件的筛出来,SORT再按第3列(金额)降序排。完美衔接,一步到位。

源数据加了新订单?它自动筛出来、自动排进去。你啥都不用干。

组合2:UNIQUE + FILTER = 提取满足条件的不重复值

主管问:"华东区有哪些客户?列个名单给我。"

=UNIQUE(FILTER(A2:A1000, B2:B1000="华东"))

FILTER先把华东区的客户都筛出来(可能有重复),UNIQUE再去重。两步变一步。

这种嵌套组合是动态数组的精髓。就像搭积木一样,每个函数干一件事,拼在一起就能解决很复杂的问题。

速记口诀 + 新手避坑指南

一、速记口诀

UNIQUE去重:给一列还一列,重复自动拜拜,源数据变它也变。

FILTER筛选:条件写括号里,多条件用乘号连,找不到记得加兜底。

SORT排序:排第几列写数字,升1降-1别搞反,列号是相对位置。

SEQUENCE序列:行列起始加步长,生成日期改格式。

RANDARRAY随机:一片随机一次生成,用完记得粘贴为值。

二、新手避坑指南(6条血泪教训)

1. #SPILL!溢出错误:结果要往下扩散,下面或右边有内容挡住了就报错。挪走挡住的内容就行。

2. #CALC!空结果:FILTER没找到符合条件的数据就报这个错。写好第三个参数(比如"无数据")兜底。

3. #NAME?版本问题:动态数组是Office 365/2021及以后版本才有的,老版本用不了。提前确认版本。

4. SORT列号是相对的:第二个参数是你选的区域里的第几列,不是工作表列号。选B-D列按D列排,写3不写4。

5. FILTER多条件加括号:每个条件都要加括号再用乘号连,不然运算优先级不对,结果错了都不知道为啥。

6. RANDARRAY会自动变:随机数每次刷新都变。想保留结果就复制粘贴为值,不然关了再开就不一样了。

写在最后

其实动态数组函数刚出来的时候,我是抵触的。心里想:去重筛选排序我手动也能做啊,干嘛学新东西?

但真正用起来才发现——这根本不是"能不能做"的问题,而是"花多少时间做"的问题。

手动去重30秒,但数据更新了你又得重来;UNIQUE写个公式2秒,源数据变了它自动更。

手动高级筛选2分钟,还得调格式;FILTER写个公式5秒,结果还自动更新。

这些时间看起来不多,但一周下来、一个月下来,差距就拉开了。别人已经交完报表喝咖啡了,你还在那儿复制粘贴删重复值。

这也是我写「效率小本本」的初衷——把那些"知道了就能省很多时间"的小技巧,一个个讲给你们听。

对我们大多数普通人来说,把Excel用好用透,就已经能解决工作里80%的问题了。不一定非要学编程,把手里的工具用到极致,一样可以很厉害。

建议你们今天就打开Excel试试。先从UNIQUE开始,感受一下"一个公式自动出结果"的爽感。相信我,用过一次你就回不去了。

咱们下期见~