Excel 的动态数组函数让我意识到,我多年来一直在用困难的方式解决问题
我认识的大多数 Excel 用户学习公式的方式跟我一样——一次学习一个函数,叠加在他们已经掌握的内容上。动态数组函数并不会取代这些技能;它们只是让很多变通方法变得不必要。我已经使用 TAKE 和 DROP 运行自我更新的前五名列表有一段时间了,下面的四个函数也发生了同样的变化。每个函数都将我以前习惯性执行的多步骤操作简化为一个公式。
FILTER 替代了整个辅助列和数组公式的仪式
一个公式现在完成了以前由多个函数分开的工作
在旧版本的 Excel 中提取匹配行意味着需要构建一个嵌套的 INDEX、MATCH、SMALL 和 IFERROR 公式,并使用 Ctrl + Shift + Enter 输入。它可以工作,但之后维护起来是个问题。另一种方法是应用自动筛选,复制可见行,然后将其粘贴到其他地方作为静态值。这也可以,但一旦源数据发生变化,就会出现问题。
FILTER 函数在一行中完成相同的工作。在我的销售电子表格中,有 32 行,涵盖各个地区、产品类别和销售人员,从西部地区提取所有电子产品的销售情况如下:
=FILTER(A2:G33, (B2:B33="West")*(C2:C33="Electronics"))
第一个参数是你想要返回的范围。第二个是条件,并且两者之间的乘法检查起到 AND 的作用——两者都必须为真。将星号改为加号会变成 OR,并且结果会自动溢出。在源数据中添加新行会在你按下回车的瞬间更新溢出的输出。
你可以使用第三个参数将 FILTER 包裹在 IFERROR 中来处理空结果。=FILTER(range, condition, "No matches") 可以防止当没有行符合条件时你的表格显示 #CALC! 错误。
UNIQUE 将我的三步去重程序变成了一个单元格
删除重复项很好,但它从未为我更新过
数据选项卡下的“删除重复项”选项适合一次性清理。问题是它生成的是一个静态列表。当你将一列复制到新位置、运行对话框或对结果进行排序时,下次有人添加行时,你必须重新做一遍。我做过的次数比我愿意数的还多。
UNIQUE 跳过了那里的每一步。在我的销售电子表格中将其指向销售人员这一列看起来像这样:
=UNIQUE(D2:D33)结果会显示 John Smith、Sarah Johnson、Mike Wilson、Lisa Brown、David Chen、Emma Davis、Tom Rodriguez 和 Amy Foster。这是八个名字,没有对话框。将其包装为 =SORT(UNIQUE(D2:D33)) 会返回按字母顺序排列的相同列表。输出仍然与源数据相连接,因此向数据中添加新名字会自动扩展溢出列表。
这种设置还为数据验证下拉列表提供了一个干净的来源。如果你使用类似 D35# 的哈希引用溢出区域,随着源数据中新名称的出现,你的下拉列表会自动增长。
SORTBY 永远结束了我复制粘贴再排序的麻烦
在不更改源数据的情况下对视图进行排序
在 Excel 中排序一直存在小风险。重新排列源数据可能会破坏引用固定行的公式,所以我的解决方法是将一块数据复制到安全的地方,然后对副本进行排序。SORT 函数有帮助,但只有在我愿意显示每一列排序内容时才有用。
SORTBY 取消了这一限制。它使用另一个范围的值对一个范围进行排序,第二个范围不必出现在输出中。我使用以下公式根据我的数据集中销售人员的收入进行排名:
=SORTBY(D2:D33, G2:G33, -1)
第一个参数是你想要返回的内容(销售人员),第二个参数是排序依据(销售收入),-1 将顺序设置为降序。名字会按照从最高销售额到最低的顺序返回,除非你要求显示,否则销售额列不会出现在输出中。
它也可以与 FILTER 清晰搭配。将 FILTER(D2:G33, B2:B33="North") 包装在 SORTBY 中,可以一次性返回仅北部地区的记录,并按从高到低排序。源数据保持不变。
SORTBY 接受多个排序级别。你可以添加更多的范围/顺序对,先按区域排序,然后在每个区域内按销售收入排序。
SEQUENCE 取代了填充柄和我曾引以为豪的 ROW 技巧
生成一个序列而不拖动任何单元格
生成一个编号系列曾经意味着拖动填充柄直到我失去耐心,或者输入 =ROW(A1) 并向下复制。两者都可以使用,但当底层数据变化时,它们都不会调整大小。
SEQUENCE 在单个单元格中处理相同的任务,并且它根据参数生成行、列或完整的网格。其语法是:
=SEQUENCE(rows, [columns], [start], [step])为了从1001开始给我数据中的八个独特销售人员编号,我使用了以下公式:
=SEQUENCE(8, 1, 1001, 1)这会返回 1001 到 1008 的单列。将列数设置为 1,步长设置为 1,可以保持它为一个连续整数的垂直列表。SEQUENCE 的优势在于它可以与其他函数结合使用。生成 2026 年 1 月的 31 天日期范围只需一个公式:
=DATE(2026, 1, SEQUENCE(31))将溢出的数组输入 TEXT、INDEX 或任何其他期望范围的函数,会合并以前需要辅助列的操作。我在写关于使用 SEQUENCE 填充日期列时更详细地介绍了这一点,它在我制作的每个日历或日程表上仍然为我节省时间。
旧版 Excel 仍然可以使用,但我不会再打开那个工具箱了
我接下来想深入研究的功能
旧的方法没有一个是坏的。它们只是需要更长的时间,而且生成的文件更难维护,无论是对我还是以后打开工作簿的其他人而言。对我来说,默认的选择就是使用 shift。新的电子表格从动态数组思维开始,只有在我编辑别人的文件时,才会使用旧的工具箱。接下来我会使用 TEXTSPLIT 来拆分字符串,VSTACK 和 HSTACK 来合并区域,以及 PIVOTBY 和 GROUPBY 来完全跳过数据透视表。每一次发布似乎都会淘汰一个旧习惯,对我来说,这完全没问题。




