一起聊聊Excel中的数组( 四 )


话筒,做个全面总结:
数组和单值做运算,是后宫和皇帝的关系,人人都得给皇帝生孩子;两个相同尺寸的数组做运算,会坚持一夫一妻制,比如水平数组和水平数组、二维数组和二维数组等;一维数组和二维数组作运算,那就是一夫多妻制(或者说一妻多夫制);而水平数组和垂直数组作运算,彻底毁三观,它奉行极端的多夫多妻制……
什么是数组公式
什么是数组公式?这个问题很有意思,非常有意思,在ExcelHome论坛,它引发了一次又一次口水战 。
话说先前咱们聊了什么是数组运算;有的函数天生就默认执行数组运算,比如SUMPRODUCT、LOOKUP等;但绝大部分函数并不默认执行数组运算,比如SUM,但有时候我们又需要它们执行数组运算,怎么呢?——可以强制它们执行 。
举个例子 。

一起聊聊Excel中的数组

文章插图
 
如上图所示的数据,需要统计人头销售总金额,可以使用公式:
=SUMPRODUCT(B2:B5*C2:C5)
也可以使用数组公式:
{=SUM(B2:B5*C2:C5)}上面这个公式前后的大括号不是手工输入的,而是在公式编辑结束时,同时按下<Ctrl+Shift+Enter>组合键后系统自动产生的 。
<Ctrl+Shift+Enter>也被称为数组三键 。它是数组运算的启动键,等于告诉系统,老子是数组公式,不是普通函数,你丫的给我执行多项运算 。
如果不按数组三键,而是直接输入普通公式:
=SUM(B2:B5*C2:C5)
结果会怎么样呢?
SUM函数只会按照正常模式运算,也就是只运算每个数组的首个元素,返回B2*C2的结果 。
这就是数组三键的意义 。
一切看起来都很正常……
然后口水战就来了 。
……
什么是数组公式?按照正常的思维逻辑,执行了数组运算的就是数组公式,对不对?
但微软公司说,不不不,只执行数组运算还不能算数组公式,做人得有仪式感,做函数也是一样的,什么是数组公式?执行了数组运算,同时公式自身还得包括在大括号中的才算 。
微软这么说,也有一点道理 。就像前面所说,虽然有的函数天生就默认执行数组运算,但绝大部分函数确实没有这个特性,它需要数组三键才能打开数组运算的开关 。
于是问题就来了 。比如说,下面这个公式……
=SUMPRODUCT(B2:B5*C2:C5)
它默认执行了数组运算,它是不是数组公式?微软说不是,因为它没有包含在一对大括号中 。
那好,我们使用数组三键给它加上大括号 。
{=SUMPRODUCT(B2:B5*C2:C5)}
这样算数组公式了吗?微软说,是的,这就符合我们制定的数组公式的概念标准了 。
但这个公式和上面的公式两者的运算过程有什么区别吗?没有,没有任何区别…
于是口水就飞起来了 。
甲:我软,你说你这是不是有病?
乙:我没病,我顶多有点仪式感 。
甲:你这是典型的形式主义 。
乙:请不要将仪式感和形式主义混为一谈 。
甲:你就是有病 。
乙:卧槽,产品是我家的,我说了算,我的地盘我做主,懂不?
……
什么是区域数组公式
咱们前面讲过,数组公式返回的是一组元素;但是Excel一个单元格只能显示数组元素中的一个结果(默认为数组中的首个元素) 。
比如,我们在D2单元格输入数组公式{=B2:B5*C2:C5},尽管该数组公式返回了多个结果,但D2单元格只显示了B2*C2的值 。
一起聊聊Excel中的数组

文章插图
 
如果需要显示数组公式的全部元素呢?——可以使用区域数组公式 。
那么什么是区域数组公式?在一个单元格中输入的公式被称为数组公式,在多个单元格中输入同一数组公式就被称为多单元格数组公式,也就是区域数组公式 。区域数组公式可以有序返回结果数组中的每个元素 。
举个简单的例子(以后见面请尊称我举栗子大力星光上士)
一起聊聊Excel中的数组

文章插图
 
如上图所示的表格,选中D2:D5单元格区域,在编辑栏编写公式=B2:B5*C2:C5,然后按数组三键结束公式输入,也就在D2:D5区域内输入了同一条数组公式,这就是区域数组公式 。
该公式返回一个内存数组{12;70;30;15},系统会将数组的每个元素依次显示在D2:D5区域中 。
需要说明的是,使用多单元格数组公式时,所选择的单元格个数必须与公式最终返回的数组元素个数相同,如果所选区域单元格的个数大于公式最终返回的数组元素个数,多出部分将显示为错误值 。老规矩,人头不够,错误值来凑 。


推荐阅读