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


举个例子,如下所示的数组公式,单行数组{1,2,3,4}乘以2 。
={1,2,3,4}*2
运算过程是数组中的每个元素都乘以2 。1*2、2*2、3*3、4*2,结果为内存数组{2,4,6,8} 。
再举一个实战的小案例 。

一起聊聊Excel中的数组

文章插图
 
如上图所示,由于B列的工资为文本值,直接SUM函数求和结果会返回0 。B6单元格改用公式如下 。
=SUMPRODUCT(B2:B5*1)
B2:B5*1,B2:B5是一个垂直数组,运算过程是B2:B5中的每一个元素均乘以1,通过数学运算将文本型数值转换为纯数值 。此时生成一个内存数组{900;100;9999;99999},SUMPRODUCT再执行求和运算返回正确结果 。
如果把数组和单值运算比作男女关系,单值就像皇帝,数组是它的后宫,数组内每一个人都要给皇帝生娃娃……所以说皇帝这个职业确实很——辛苦呐!
……
第2种情况是一维数组和一维数组之间的运算 。
由于一维数组有两种形式,这种运算就又产生了两种情况 。一种是同方向一维数组之间的运算 。比如垂直数组和垂直数组或者水平数组和水平数值间的运算 。
这种情况的数组运算是比较单纯的男女关系,两个数组内的每个元素按照先后顺序、一夫一妻制结婚 。
举个例子 。
一起聊聊Excel中的数组

文章插图
 
以上图所示数据为例 。计算商品售出总金额 。公式如下:
=SUMPRODUCT(B2:B5*C2:C5)
B2:B5是垂直数组,C2:C5也是垂直数组,其运算过程中是B2*C2、B3*C3、B4*C4、B5*C5……你看,是不是按照先后顺序、一夫一妻制的规则进行运算的?它的计算结果是4个元素的垂直数组 。
{12;70;30;15}
这规则似乎看起来让单身汪感到特别美好,但其实并不尽然 。男多女少或者女多男少的情况了解一下?
比如公式:
=SUMPRODUCT(B2:B5*C2:C4)
B2:B5是4个元素构成的垂直数组,C2:C4是3个元素构成的垂直数组;如果前者是男人,后者是女人,那就属于男多女少了 。
这个时候B2跟C2结婚了,B3跟C3结婚了,B4跟C4结婚了,那B5怎么办呢?女人们都嫁了,剩下一个男人怎么办?总不能送个充气娃娃强制脱贫吧?——没办法,返回错误值补位吧 。
因此它的计算结果也是4个元素构成一个内存数组,只不过最后一个元素是错误值 。
{12;70;30;#N/A}
同样的道理,公式:
=SUMPRODUCT(B2:B4*C2:C5)
B2和C2结婚,B3和C3结婚,B4和C4结婚 。剩下一个女孩C5,但没有男孩了,怎么办呢?没办法,男女平等,也返回错误值补位吧 。
{12;70;30;#N/A}
……
总结一下 。同方向一维数组之间的运算,必须具有相同的元素数量,否则结果中会产生错误值进行补位,它的运算结果依然是同向的一维数组 。
外一种情况是不同向的两个一维数值之间的运算,也就是垂直数组和水平数组之间的运算,这种情况男女关系比较复杂,身经百战的居委会大妈看了都得哭 。
我举个例子 。
一起聊聊Excel中的数组

文章插图
 
如上图所示的数据 。B6单元格输入公式:
=SUMPRODUCT(A2:A4*B1:C1)
A2:A4是3个元素构成的垂直数组,B1:C1是2个元素构成的水平数组,它俩之间做乘法运算,结果返回了一个3行2列的二维内存数组:
{4,5;8,10;12,15}
它的运算过程是这样的 。垂直数组中的每个元素分别和水平数组中的每个元素作运算,如果把这比作男女关系——委实有点混乱,所以还是先别打这个比方了 。
按照有序原则,首先运算的是A2 。
A2先和B1运算,也就是A2*B1,然后再和C1做运算,也就是A2*C1 。
一起聊聊Excel中的数组

文章插图
 
然后轮到A3 。
A3先和B1运算,也就是A3*B1,然后再和C1做运算,也就是A3*C1 。
一起聊聊Excel中的数组

文章插图
【一起聊聊Excel中的数组】 
最后轮到A4 。
A4先和B1运算,也就是A4*B1,然后再和C1做运算,也就是A4*C1 。
一起聊聊Excel中的数组

文章插图
 
……
有朋友说,这不是一夫多妻制吗?同志,我说你是不是对一夫多妻有啥误解?你的意思是A2娶了两个老婆,B1和C1;新婚第2天,A2出门遇见了A3,不聊不知道一聊才知道,原来A3昨天也新婚了,也娶了两个老婆,这俩老婆也是B1和C1,你说这尴尬不尴尬?


推荐阅读