Table of contents
由于Excel 365计算引擎的革命性更新,数组公式对每个人来说都变得非常简单易懂,而不仅仅是超级用户。 本教程解释了新的Excel动态数组的概念,并展示了它们如何使你的工作表更有效率,并更容易设置。
Excel数组公式一直被认为是大师和公式专家的特权。 如果有人说 "这可以用数组公式来完成",许多用户的直接反应是 "哦,难道没有其他方法吗?"。
动态数组的引入是一个期待已久且最受欢迎的变化。 由于其能够以简单的方式处理多个值,没有任何技巧和怪癖,动态数组公式是每个Excel用户都能理解并喜欢创建的东西。
Excel动态数组
动态数组 是可调整大小的数组,根据在单个单元格中输入的公式,自动计算并将数值返回到多个单元格中。
在30多年的历史中,Microsoft Excel经历了许多变化,但有一点是不变的--一个公式,一个单元格。 即使是传统的数组公式,也需要在每个希望出现结果的单元格中输入一个公式。 有了动态数组,这一规则不再适用。 现在,任何返回数组值的公式都会自动溢出到邻近的换句话说,操作动态数组变得和处理单个单元格一样简单。
让我用一个非常基本的例子来说明这个概念。 假设,你需要将两组数字相乘,例如,计算不同的百分比。
在Excel的前动态版本中,下面的公式只对第一个单元格有效,除非你在多个单元格中输入,并按下Ctrl + Shift + Enter键,明确地使其成为一个数组公式。
=A3:A5*B2:D2
现在,看看在Excel 365中使用同样的公式会发生什么。 你只需在一个单元格(在我们的例子中是B3)中键入它,按回车键......然后整个页面就会立刻充满结果。
用一个公式填满多个单元格被称为 溢出 ,填充的单元格范围被称为溢出范围。
需要注意的是,最近的更新不仅仅是在Excel中处理数组的新方法。 事实上,这是对整个计算引擎的突破性改变。 有了动态数组,Excel函数库中增加了一堆新函数,现有的函数开始更快、更有效地工作。 最终,新的动态数组应该会完全替换老式的数组公式,这些公式是用Ctrl + Shift + Enter快捷键输入的。
Excel动态数组的可用性
动态数组是在2018年的微软Ignite会议上推出的,并在2020年1月向Office 365用户发布。 目前,它们可以在 微软365订阅 和Excel 2021。
在这些版本中支持动态数组。
- Windows版的Excel 365
- 苹果的Excel 365
- Excel 2021
- Excel 2021 for Mac
- 适用于iPad的Excel
- iPhone版的Excel
- 适用于安卓平板电脑的Excel
- 适用于安卓手机的Excel
- 网络版的Excel
Excel动态数组函数
作为新功能的一部分,在Excel 365中引入了6个新函数,它们可以原生处理数组,并将数据输出到单元格范围内。 输出始终是动态的--当源数据发生任何变化时,结果会自动更新。 因此,该组的名称是-- 动态数组函数 .
这些新功能可以轻松应对一些传统上被认为是难以破解的任务。 例如,它们可以删除重复的内容,提取和计算唯一的值,过滤掉空白,生成随机整数和小数,按升序或降序排序,以及更多。
下面你会发现每个功能的简要描述,以及深入的教程链接。
- UNIQUE - 从一系列的细胞中提取独特的项目。
- FILTER - 根据你定义的标准来过滤数据。
- SORT - 按指定的列对单元格的范围进行排序。
- SORTBY - 将一个单元格区域按另一个区域或数组排序。
- RANDARRAY - 产生一个随机数的数组。
- SEQUENCE - 产生一个连续的数字列表。
- TEXTSPLIT - 通过指定的分隔符跨列或/和跨行分割字符串。
- TOCOL - 将一个数组或范围转换为一个单列。
- TOROW - 将一个范围或数组转换为一个单行。
- WRAPCOLS - 根据每行指定的数值数量,将一行或一列转换为一个二维数组。
- WRAPROWS - 根据每列指定的数值数量,将一行或一列重塑为一个二维数组。
- TAKE - 从一个数组的开始或结束处提取指定数量的连续的行和/或列。
此外,还有两个流行的Excel函数的现代替代品,它们没有被正式列入小组,但利用了动态数组的所有优势。
XLOOKUP - 是VLOOKUP、HLOOKUP和LOOKUP的一个更强大的继承者,它可以在列和行中进行查询,并返回多个值。
XMATCH - 是MATCH函数的一个更通用的继承者,可以执行垂直和水平查找,并返回指定项目的相对位置。
Excel动态数组公式
在Excel的现代版本中,动态数组的行为被深度整合,成为了原生的 所有功能 简单地说,对于任何返回一个以上数值的公式,Excel都会自动创建一个可调整大小的范围,将结果输出到其中。 由于这种能力,现有的函数现在可以发挥神奇的作用了!
下面的例子显示了新的动态数组公式的作用,以及动态数组对现有函数的影响。
例1.新的动态数组函数
这个例子展示了用Excel动态数组函数可以更快、更简单地完成一个解决方案。
要从一列中提取唯一值的列表,传统上你会使用像这样复杂的CSE公式。 在动态Excel中,你只需要一个基本形式的UNIQUE公式。
=unique(b2:b10)
你在任何一个空单元格中输入公式,然后点击回车键。 Excel立即提取列表中所有不同的值,并将它们输出到从你输入公式的单元格(在我们的例子中是D2)开始的单元格范围内。 当源数据发生变化时,结果会重新计算并自动更新。
例2.在一个公式中结合几个动态数组函数
如果没有办法用一个函数完成一个任务,那就把几个函数连在一起!例如,要根据条件过滤数据,并按字母顺序排列结果,可以用SORT函数围绕FILTER这样做。
=SORT(FILTER(A2:C13, B2:B13=F1, "无结果"))
其中A2:C13是源数据,B2:B13是要检查的数值,F1是标准。
例3.将新的动态数组函数与现有函数一起使用
由于Excel 365中实现的新计算引擎可以轻松地将传统的公式变成数组,因此没有什么可以阻止你将新旧函数结合在一起。
例如,要计算某个范围内有多少个唯一值,可以将动态数组UNIQUE函数嵌套到古老的COUNTA中。
=counta(unique(b2:b10))
例4.现有函数支持动态数组
如果你在旧版本(如Excel 2016或Excel 2019)中向TRIM函数提供一个单元格范围,它将返回第一个单元格的单一结果。
=TRIM(A2:A6)
在动态的Excel中,同一个公式会处理所有的单元格并返回多个结果,如下图所示。
例5.返回多个值的VLOOKUP公式
众所周知,VLOOKUP函数被设计为根据你指定的列索引返回一个单一的值。 然而,在Excel 365中,你可以提供一个列号数组来返回几个列的匹配。
=vlookup(f1, a2:c6, {1,2,3}, false)
例6.囊括公式的简单化
在早期的Excel版本中,TRANSPOSE函数的语法没有留下任何错误的空间。 要旋转工作表中的数据,你需要计算原来的列和行,选择相同数量的空单元格,但改变方向(在巨大的工作表中是一个令人费解的操作!),在选定的范围内输入一个TRANSPOSE公式,然后按Ctrl + Shift + Enter来正确完成。 咻!!!!!!!!!!!(在这里,我想说的是,如果你想在工作表中旋转数据,你需要在工作表中选择一个空单元格,然后按Ctrl + Shift + Enter来正确完成。
在动态Excel中,你只需在输出范围的最左边的单元格中输入公式,然后按回车键。
=transpose(a1:b6)
完成了!
溢出范围 - 一个公式,多个单元格
ǞǞǞ 溢出范围 是一个包含动态数组公式返回值的单元格范围。
当选择溢出范围内的任何单元格时,出现蓝色边框,表明里面的所有内容都是由左上角单元格中的公式计算出来的。 如果你删除第一个单元格中的公式,所有的结果就会消失。
溢出范围是一个非常好的东西,它使Excel用户的生活变得更加容易。 以前,对于CSE数组公式,我们必须猜测要把它们复制到多少个单元格。 现在,你只需在第一个单元格中输入公式,让Excel来处理剩下的问题。
注意:如果有其他数据阻挡了溢出范围,就会发生#SPILL错误。 一旦阻挡的数据被移除,错误就会消失。
欲了解更多信息,请参见Excel溢出范围。
泄漏范围参考(#符号)
要参考溢出范围,请在范围内左上角单元格的地址后加一个哈希标签或磅符号(#)。
例如,要想知道A2中的RANDARRAY公式产生了多少个随机数,请向COUNTA函数提供溢出范围参考。
=COUNTA(A2#)
要将溢出范围内的数值相加,使用。
=SUM(A2#)
提示。
- 要快速引用一个溢出区,只需用鼠标选择蓝框内的所有单元格,Excel就会为你创建溢出区。
- 与普通的范围参考不同,溢出范围参考是动态的,对范围大小的调整会自动作出反应。
- 提取独特价值:传统配方
- 计算独特和不同的价值:传统公式
- 按字母顺序排列列:传统公式
- 动态Excel 目前只有Excel 365和Excel 2021支持动态数组、函数和公式。
- 遗留的Excel ,又称传统或前动态Excel,只支持Ctrl + Shift + Enter数组公式。 是Excel 2019、Excel 2016、Excel 2013和早期版本。
- 一个动态数组公式被输入到一个单元格中,并通过常规的回车键完成。 要完成一个老式的数组公式,你需要按Ctrl + Shift + Enter 。
- 新的数组公式自动溢出到许多单元格。 CSE公式必须复制到一系列单元格才能返回多个结果。
- 动态数组公式的输出会随着源区数据的变化而自动调整大小。 CSE公式在返回区太小的情况下会截断输出,在返回区太大的情况下会在额外的单元格中返回错误。
- 一个动态数组公式可以很容易地在单个单元格中进行编辑。 要修改CSE公式,你需要选择并编辑整个范围。
- 在CSE公式范围内不可能删除和插入行--你需要先删除所有现有的公式。 对于动态数组,插入或删除行都不是问题。
- Excel #SPILL错误--原因和解决方法
- 如何用VLOOKUP, INDEX MATCH, SUMIF修复#SPILL!
更多详情,请参见泄漏范围操作员。
隐含的交叉点和@字符
在动态数组Excel中,公式语言还有一个重大变化--引入@字符,称为 隐式相交运算符 .
在Microsoft Excel中。 隐性交叉 是一种公式行为,它将许多值减少到一个单一的值。 在旧的Excel中,一个单元格只能包含一个单一的值,所以这是默认的行为,不需要特殊的操作符。
在新的Excel中,所有的公式都被默认为数组公式。 如果你不希望在特定的公式中出现数组行为,那么隐含的相交运算符是用来阻止数组行为的。 换句话说,如果你希望公式只返回一个值,在函数的名称前加上@,它的行为就会像传统Excel中的非数组公式。
要了解它的实际工作情况,请看下面的屏幕截图。
在C2中,有一个动态数组公式,在许多单元格中溢出结果。
=UNIQUE(A2:A9)
在E2中,该函数的前缀为@字符,调用隐式相交。 结果,只返回第一个唯一的值。
=@unique(a2:a9)
更多信息,请参见《Excel中的隐式相交》。
Excel动态数组的优势
毋庸置疑,动态数组是多年来Excel最好的增强功能之一。 像任何新功能一样,它们也有强项和弱项。 对我们来说,幸运的是,新的Excel动态数组公式的强项是压倒性的!
简单且更强大
动态数组使我们有可能以更简单的方式创建更强大的公式。 下面是几个例子。
适用于所有公式的本地
在动态Excel中,你不需要理会哪些函数支持数组,哪些不支持。 如果一个公式可以返回多个值,它就会默认这样做。 这也适用于算术运算和传统的函数,如本例所示。
嵌套的动态数组函数
为了解决更复杂的任务,你可以自由地组合新的Excel动态数组函数,或者像这里和这里显示的那样,将它们与旧的函数一起使用。
相对引用和绝对引用不太重要
由于 "一个公式,许多值 "的方法,没有必要用$符号锁定范围,因为从技术上讲,公式只在一个单元格中。 因此,在大多数情况下,使用绝对、相对或混合单元格引用并不重要(这一直是没有经验的用户感到困惑的根源)--无论如何,一个动态数组公式会产生正确的结果
动态数组的局限性
新的动态数组很好,但就像任何新功能一样,有一些注意事项,你应该注意到。
结果不能以通常的方式进行排序
由动态数组公式返回的溢出范围不能通过使用Excel的排序功能进行排序。 任何这样的尝试都会导致" 你不能改变一个数组的一部分 "的错误。 要想将结果从小到大排列,或者反过来,请将你当前的公式包裹在SORT函数中。 例如,你可以这样在一次过滤和排序。
不能删除溢出范围内的任何值
溢出范围内的值都不能被删除,因为同样的原因:你不能改变数组的一部分。 这种行为是预期的,也是符合逻辑的。 传统的CSE数组公式也是这样工作的。
在Excel表格中不被支持
这个功能(或错误?)是相当出乎意料的。 动态数组公式不能在Excel表格内使用,只能在常规范围内使用。 如果你试图将溢出的范围转换为表格,Excel会这样做。 但是,你只会看到一个#SPILL!错误,而不是结果。
不要与Excel Power Query一起工作
动态数组公式的结果不能加载到Power Query中。 说,如果你试图用Power Query把两个或更多的溢出范围合并在一起,这就不能工作。
动态数组与传统CSE数组公式的比较
随着动态数组的引入,我们可以谈一谈Excel的两种类型。
不言而喻,动态数组在各方面都优于CSE数组公式。 虽然出于兼容性的考虑保留了传统的数组公式,但从现在开始,建议使用新的数组公式。
以下是最基本的区别。
向后兼容:传统Excel中的动态数组
当你在旧版Excel中打开一个包含动态数组公式的工作簿时,它被自动转换为用{大括号}括起来的传统数组公式。 当你在新版Excel中再次打开工作表时,大括号将被删除。
在传统的Excel中,新的动态数组函数和溢出范围引用的前缀是_xlfn,表示不支持这种功能。 溢出范围引用的符号(#)被ANCHORARRAY函数取代。
例如,UNIQUE公式是这样出现在 Excel 2013 :
大多数动态数组公式(但不是全部!)会一直在传统的Excel中显示其结果,直到你对其进行任何修改。 编辑一个公式会立即破坏它并显示一个或多个#NAME? 错误值。
Excel动态数组公式不工作
根据不同的函数,如果你使用了不正确的语法或无效的参数,可能会出现不同的错误。 以下是你在任何动态数组公式中可能遇到的3个最常见的错误。
#SPILL!错误
当一个动态数组返回多个结果,但有东西阻挡了溢出范围时,会发生#SPILL!错误。
要解决这个错误,你只需要清除或删除溢出区中不完全空白的任何单元格。 要快速发现所有碍事的单元格,点击错误指示器,然后点击 选择阻碍性细胞 .
除了非空的溢出范围,这个错误可能是由其他一些原因引起的。 更多信息,请参见。
#REF!错误
由于对工作簿之间的外部引用支持有限,动态数组要求两个文件都打开。 如果源工作簿被关闭,会显示#REF!错误。
#NAME? 错误
如果你试图在旧版本的Excel中使用动态数组函数,会出现#NAME? 错误。 请记住,新的函数只在Excel 365和Excel 2021中可用。
如果在支持的Excel版本中出现这种错误,请仔细检查有问题的单元格中的函数名称。 有可能是打错了:)
这就是如何在Excel中使用动态数组。 希望你会喜欢这个奇妙的新功能!无论如何,我感谢你的阅读,并希望下周在我们的博客上看到你的身影。