Excel动态数组、函数和公式

  • Share This
Michael Brown

由于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个新函数,它们可以原生处理数组,并将数据输出到单元格范围内。 输出始终是动态的--当源数据发生任何变化时,结果会自动更新。 因此,该组的名称是-- 动态数组函数 .

    这些新功能可以轻松应对一些传统上被认为是难以破解的任务。 例如,它们可以删除重复的内容,提取和计算唯一的值,过滤掉空白,生成随机整数和小数,按升序或降序排序,以及更多。

    下面你会发现每个功能的简要描述,以及深入的教程链接。

    1. UNIQUE - 从一系列的细胞中提取独特的项目。
    2. FILTER - 根据你定义的标准来过滤数据。
    3. SORT - 按指定的列对单元格的范围进行排序。
    4. SORTBY - 将一个单元格区域按另一个区域或数组排序。
    5. RANDARRAY - 产生一个随机数的数组。
    6. SEQUENCE - 产生一个连续的数字列表。
    7. TEXTSPLIT - 通过指定的分隔符跨列或/和跨行分割字符串。
    8. TOCOL - 将一个数组或范围转换为一个单列。
    9. TOROW - 将一个范围或数组转换为一个单行。
    10. WRAPCOLS - 根据每行指定的数值数量,将一行或一列转换为一个二维数组。
    11. WRAPROWS - 根据每列指定的数值数量,将一行或一列重塑为一个二维数组。
    12. 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中,公式语言还有一个重大变化--引入@字符,称为 隐式相交运算符 .

      在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的两种类型。

      1. 动态Excel 目前只有Excel 365和Excel 2021支持动态数组、函数和公式。
      2. 遗留的Excel ,又称传统或前动态Excel,只支持Ctrl + Shift + Enter数组公式。 是Excel 2019、Excel 2016、Excel 2013和早期版本。

      不言而喻,动态数组在各方面都优于CSE数组公式。 虽然出于兼容性的考虑保留了传统的数组公式,但从现在开始,建议使用新的数组公式。

      以下是最基本的区别。

      • 一个动态数组公式被输入到一个单元格中,并通过常规的回车键完成。 要完成一个老式的数组公式,你需要按Ctrl + Shift + Enter 。
      • 新的数组公式自动溢出到许多单元格。 CSE公式必须复制到一系列单元格才能返回多个结果。
      • 动态数组公式的输出会随着源区数据的变化而自动调整大小。 CSE公式在返回区太小的情况下会截断输出,在返回区太大的情况下会在额外的单元格中返回错误。
      • 一个动态数组公式可以很容易地在单个单元格中进行编辑。 要修改CSE公式,你需要选择并编辑整个范围。
      • 在CSE公式范围内不可能删除和插入行--你需要先删除所有现有的公式。 对于动态数组,插入或删除行都不是问题。

      向后兼容:传统Excel中的动态数组

      当你在旧版Excel中打开一个包含动态数组公式的工作簿时,它被自动转换为用{大括号}括起来的传统数组公式。 当你在新版Excel中再次打开工作表时,大括号将被删除。

      在传统的Excel中,新的动态数组函数和溢出范围引用的前缀是_xlfn,表示不支持这种功能。 溢出范围引用的符号(#)被ANCHORARRAY函数取代。

      例如,UNIQUE公式是这样出现在 Excel 2013 :

      大多数动态数组公式(但不是全部!)会一直在传统的Excel中显示其结果,直到你对其进行任何修改。 编辑一个公式会立即破坏它并显示一个或多个#NAME? 错误值。

      Excel动态数组公式不工作

      根据不同的函数,如果你使用了不正确的语法或无效的参数,可能会出现不同的错误。 以下是你在任何动态数组公式中可能遇到的3个最常见的错误。

      #SPILL!错误

      当一个动态数组返回多个结果,但有东西阻挡了溢出范围时,会发生#SPILL!错误。

      要解决这个错误,你只需要清除或删除溢出区中不完全空白的任何单元格。 要快速发现所有碍事的单元格,点击错误指示器,然后点击 选择阻碍性细胞 .

      除了非空的溢出范围,这个错误可能是由其他一些原因引起的。 更多信息,请参见。

      • Excel #SPILL错误--原因和解决方法
      • 如何用VLOOKUP, INDEX MATCH, SUMIF修复#SPILL!

      #REF!错误

      由于对工作簿之间的外部引用支持有限,动态数组要求两个文件都打开。 如果源工作簿被关闭,会显示#REF!错误。

      #NAME? 错误

      如果你试图在旧版本的Excel中使用动态数组函数,会出现#NAME? 错误。 请记住,新的函数只在Excel 365和Excel 2021中可用。

      如果在支持的Excel版本中出现这种错误,请仔细检查有问题的单元格中的函数名称。 有可能是打错了:)

      这就是如何在Excel中使用动态数组。 希望你会喜欢这个奇妙的新功能!无论如何,我感谢你的阅读,并希望下周在我们的博客上看到你的身影。

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.