分享

我和数组公式有个约会之相识

 jkping 2015-08-30

一、数组的概念

什么是数组,数组就是具有某种联系的多个元素的组合,这些元素可以是文本、数值、逻辑值、日期、错语值等。在Excel中,单行或单列的数组是一维数组,多行多列的数组是二维数组。

如下面图一,随机分布的数字单元格,则为无序数,不属于数组。

                         

      图一:无序数                              图二:数组

数组的书写方式:同行的元素间用逗号“,”分隔,不同的行用分号“;”分隔

水平数组:1,2,3,4,5,6,7,8,9 ……,N}。

垂直数组:{1;2;3;4;5;6;7;8;9……;N}。

二维数组:{1,2;3,4;5,6;7,8;9……;N}。

在实际使用中,由于较长的数组书写不方便,故可以使用公式产生。可由COLUMNA:D)函数产生如{1,2,3,4},而ROW(1:4)可产生1;2;3;4}。

另外,因水平数组中COLUMN()的参数为英文字母列号,运算时不好计数列号,通常情况使用TRANSPOSE使其转换成ROW()的数字参数,如TRANSPOSE(ROW(1:4)) 结果为{1;2;3;4},更加方便用户计数运算。

对于二维数组,遵循先行后列的规则,而INDEX()函数、OFFSET()函数都是先行后列的排列,可以结合其他函数(如MATCH)产生而未数组。

二、数组运算

单值运算 A1+1 àF(X)

数值运算 A1+1;2;3;àF{X1;X2;X3}

当数值运算中的参数变为数组时,即为数组运算。但并不是参数为数组形式时就是数组运算,如SUM()函数,参数本来就可以引用数组的方式,但这个不是数组运算。

三、数组公式

数组公式就是包含数组运算的公式。

输入数组公式时,用Ctrl+Shift+Enter结束公式的输入。这是最关键的,这相当于用户告诉Excel:“这个公式是数组,按照数组的方式来”。于是,Excel不能用常规的逻辑计算。当你按下三键后,Excel会自动给公式加上“{}”以和普通公式区别开来,不用用户输入“{}”,但如是是想在公式里直接表示一个数组,就需要输入“{}”来把数组的元素括起来。

=SUM2+ROW13)),当录入结束后按ENTER,那么结果为3;而按CTRL+SHIFT+ENTER结束,返回的结果为12

计算规则:

3.1两个同行同列的数组计算是对应元素间进行运算,并返回同样大小的数组。

3.2一个数组与一个单一的数据进行运算,是将数组的每一元素均与那个单一数据进行计算,并返回同样大小的数组。

3.3单列数组与单行数组的计算:
A
、计算结果返回一个多行列的数组;
B
、返回数组的行数同单列数组的行数相同、列数同单行数组的列数相同。
C
、返回数组中第R行第C列的元素是单列数组的第R个元素和单行数组的第C个元素运算的结果。

3.4行数(或列数)相同的单列(或单行)数组与多行多列数组的计算:

A、计算结果返回一个多行列的数组;
B
、返回数组的行、列数与多行多列数组的行列数相同;
C
、单列数组与多行多列数组计算时,返回的数组的第R行第C列的数据等于单列数组的第R行的数据与多行多列数组的第R行第C列的数据的计算结果;
D
、单行数组与多行多列数组计算时,返回的数组的第R行第C列的数据等于单行数组的第C列的数据与多行多列数组的第R行第C列的数据的计算结果。

3.5行、列数不相等的数组计算:

A、公式返回一个多行多列数组;
B
、返回数组的行数与参与计算的两个数组中行数较大的数组的行数相同,列数与较大的列数的数组相同;
C
、返回数组的大于较小行数数组行数、大于较大列数数组列数的区域的元素均为#N/A。有效元素为两个数组中对应数组的计算结果。

PS对于行列数不匹配的数组,在计算时Excel会将数组对象进行扩展,以符合计算需要的维数。每一个参与计算的数组的行数必须与行数最大的数组的行数相同,列数必须与列数最大的数组的列数相同。

数组公式分类:

单单元格公式:数组公式应用单个单元格,一般只返回一个运算结果。

多单元格公式:数组公式应用多个单元格,一般返回多个运算结果,对应相应的单元格内。

输入多单元格数组公式时,应先选中需要返回数据的单元格区域,选中的单元格区域的行、列数应与返回数组的行、列数相同。否则,如果选中的区域小于数组返回的行列数,则返回结果不完整。如果选择的区域大于数组返回的行列数,那超出的区域将会返回#N/A值。

案例:

单单元格公式:

 
   多单元格公式:

 
四、参数驱动

函数的参数或运算符的操作数从单值升级为数组,那么就得到相应的数组返回值形式。要得到什么样的结果,就用参数去考虑。

函数运算中单值参数升级变为数组后,函数的返回值就由参数的改变而得到数组的结果,运算的结果的形式由参数决定。利用参数决定返回结果的指导思想,可以有目的地数组化参数,从而得到一维数组或二维数组。

五、贴近实战

Row()函数的标记作用

对于excel数组来说,行列确定也就确定了位置。通过row()进行标记,可以得到需要的信息,从而能够对数组进行处理变换。

如课程中的案例,通过($B$6:$B$11=$E$7)*ROW($1:$6),按F9查看,可得到{FALSE;FALSE;TRUE;FALSE;TRUE;FALSE}*{1;2;3;4;5;6},此部分的可得到数组{0;0;3;0;5;0},从而标记出了代码C出现的行数。

这里也可以看出数组运算的优势,即可以返回多个值。

 

筛选算子

主要起逻辑强化的作用,仍如($B$6:$B$11=$E$7)*ROW($1:$6),这里使用“*”,来达到逻辑与的作用,通过乘法运算得到非0项,也就是我们需要的结果{0;0;3;0;5;0}

不重复算子

由于MATCH函数只能获得各个数据第一次出现的位置,与ROW1:x)相比较后,两者相同的位置即为不重复数据,两者不同则是重复的数据(如下图)。或配合LARGESMALL取出所需数组(如之前ROW函数例子)。

 

同样的道理,当我们查找不重复值是在一个字符串里,我们还可以使用FIND()MID()函数来生成不重复算子。

 

参数驱动

这里展现的是逐步将参数数组化,从而最终得到一维数组、二维数组甚至多维数组。这种思想起着向导作用,如果面对复杂的问题采取逐步分解,一步步达到最终结果。

第一步,行方向运用数组

 

第二步:列方向也数组化

 

六、总结

刚接触数组时,可能会感觉太难,但就像老师所讲的参数驱动,我们可以一步步来,从而完成一个数组公式。在论坛中,也可以找到很多帖子来帮助我们学习。

这个帖子很适合初学者,分享跟大家。谢谢!

http://club./thread-511876-1-1.html

 

 

更多精彩,可登陆ExcelHome查看。

网址:http://club./forum.php

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多