一、数组的运算
由于数组的构成元素包含数值、文本、逻辑值、错误值,因此数组继承着各类数据的运算特特性(错误值除外),即数值型和逻辑型数组可以进行假发和乘法等常规的算数运算;文本型数值可以进行连接符运算。
对于运算数组进行运算是,Excel有如下限制。
要点1对于相同维度(方向)的一位数组运算,要求数组的尺寸必须一致,否则运算结果的部分数据返回#N/A错误。
例1两个一维数组的乘法运算
以应用技巧二十一中的例1中的计算各饮品销售额的数组公式为例,公式中对E3:E11和F3:F11两个区域对应相乘,由于两个区域都是9行1列的引用,在内部运算中,系统会自动将各行元素对应相乘,结果将变为9行1列的内存数组。
若用户吴输入了下面的公式,公式将返回错误结果:
{=E3:E11:F3:F10}
其结果为一个包含错误值的一维数组:{44;200;36;112;125;54;28;60;#N/A}。
例2两个一维数组的连接运算
如图1所示的庺人员情况表中,下面的公式将根据部门和姓名两个关键字查询人员的身份证号码。
I4单元格数组公式如下:
{=INDEX(E2:E11,MATCH(I2&I3,B2:B11&C2:C11,0))}
公式中主要利用了将两个一维区域引用进行连接运算,如B2:B11&C2:C11,最终生成同尺寸的一维数组,再利用MATCH函数进行定位判断,最终查询出指定人员的身份证信息。
要点2对于不同维度的一维数组的运算,如1行3列的水平数组与5行1列的垂直数组,运算结果生成新的5行3列的数组。
例2使用两个一维数组构造二维数组
如图2所示的工作表已经定义了两个一维命名数组:H_Arrar和V_Array,下面的公式将对两个数组进行加法运算,生成一个新的二维数组。
名称定义:
H_Arrar:={0,1,2,3}
V_Arrar:={1;5;9}
B8:E10的多单元格数组公式如下:
{=V_Array+H_Array}
公式结果最终生成3行4列的二维数组:{1,2,3,4;5,6,7,8;9,10,11,12}
要点3对于一维数组与二维数组的运算,一维数组与二维数组的相同维度上的元素个数必须相等,否则结果包含#N/A错误。
例3部门评价等级转换
在如图3所示的工作表中,B2:E8单元格区域是部门综合考评表,B11:C14单元格区域为优良中差等级对应的分数,C3:E3单元格区域为3个考核项目的系数。
要求计算各部门的综合评分,即各部门的各项评价等级转为分数后与对应项目系数的乘积之和。
F12单元格评分数组公式如下:
{=SUM(C$3:E$3*SUMIF(B$11:B$14,C$4:E$8,C$11:C$14)*(B$4:B$8=E12))}
公式中(C$3:E$3*SUMIF(B$11:B$14,C$4:E$8,C$11:C$14)段即是一位数组与二维数组的乘法运算。
其中,系数C3:E3区域数组array01为:1行3列水平数组。
SUMIF(B$11:B$14,C$4:E$8,C$11:C$14)公式结果为内存数组array02:5行3列数组,公式结果得到每个部门对应的系数分。
由于在水平方向上,array01与array02都具有相同的尺寸,因此数组array01会与array02逐行相乘运算结果仍然为5行3列内存数组arry03。
而(B$4:B$8=E12)部门比较结果为一维逻辑行数组array04(5行1列),再与二维数组array03相乘,将非查询部门的数值置为0,最后求和得出查询部门的综合评分。
要点4对于二维数组之间的运算,要求数组的尺寸必须完全一致,否则结果包含#N/A错误。其原理与前面介绍的数组运算示例完全相同,这里不再赘述。
注意:在逻辑型数组运算中,*和+能够替换AND和OR函数,但是反之不行。因为AND函数、OR函数返回的结果是单值TRUE或FALSE,而如果数组公式需要执行多重计算时,单值不能形成数组公式各参数间的一一对应关系。
二、数组的矩阵运算
MMULT函数经常用于计算两个举证的乘积,在使用这个函数时,应该特别注意一下几个要点。
(1)Array1的列数必须与array2的行数相同,而且两个数组中都只能包含数值。
(2)Array1可以使单元格区域引用或数组(包括内存数组)。
例4使用MMULT函数计算产品结构指数
如图4所示,模拟某食品公司生产A~E
5种产品的成份构成明细表,目前希望根据左表的产品构成成份与右表的成份系数进行分别相乘得出产品的结构指数。
由于左表的B1:D1单元格,其顺序分别与右表的H3:H5想对应,因此,利用MMULT函数则可以进行举证相乘,E2:E6产品的结构指数公式为:
{=MMULT($B2:$D6,I$3:I$5)}
虽然MMULT函数本身支持内部多项运算,但该示例将结果填入E2:E6多单元格中,因此需要使用多单元格联合数组公式进行输入,最终MMULT函数利用矩阵运算的原理得出结果。
如产品A的运算过程为成份1、2、3的值(B2:D2)分别与其对应的系数(I3:I5)相乘,最后并求和得出结果,其他产品线以此类推。
当然,在这里还可以直接使用混合引用,利用TRANSPOSE函数同样也能够得出正确的结果,如F2单元格数组公式如下:
{=SUM($B2:$D2*TRANSPOSE($I$3:$I$5))}
��