本文主要是介绍我与数组公式有个约会之相识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言:这个约会很偶然因为想报的班都满员了,又不想错过培训学习的机会就报了数组班(以前没接触数组还自认为EXCEL还过得去)但听完了课看到作业我完全蒙了无法下手,才发现自已原来真的很差很差。这个发现让我更加用心的再次听课,更加努力,希望能得到一次质的飞跃。
概念解析:
一、
数组公式,仅仅是对按了ctrl+shift+enter结束公式的编辑方式的一种称呼,与数组完全是两码事。(这是在论坛中借用的一句话)
1.
1.1
1.2
1.3
(transpose公式解析:transpose是将垂直引用转置为水平引用,例=transposn(A1:A5)ààA1:E1)
2.
2.1
2.2
2.3
3.
3.1
3.2
3.3
二、数组运算
单值运算
数值运算
当我们的数值运算中操作数为数组时,即数组运算。当函数的参数为数组时,也进行数组运算。
但我们要区分,不是参数为数组形式时就是数组运算,如SUM()函数,参数本来就可以引用数组的方式,但这个不是数组运算。
当我们将函数中的其一参数改为数组时就进行数组运算。例VLOOKUP()函数,我们分别将第一参数或第三参数抽象为数组时就时行数组运算。
二、
数组公式有两种分类:
三、
并行处理
四、
驱动参数就是函数里的必要参数值。
函数的参数或运算符的操作数从单值升级为数组,那么就得到相应的数组返回值形式。
就是数组公式是由某个参数或运算符数组化而发生的公式性质的变化。
例:比如说=COUNTIF(A1:A5,A)这样的下拉公式,我们可以直接将第二参数数组化,从而得到数组公式
=COUNTIF(A1:A5,B1:B5),也就是说,当我们需要构造数组公式时,可以从某个参数数组化开始,让参数驱动公式,升级为数组的运算。
五、
ROW()函数
=LARGE((代码=E7)*ROW($1:$6),ROW(1:1)),将前面的条件为TRUE(=1)时,ARRAT参数就可以得到ROW(1:6)相应的行值,其余均为0
为什么MATCH()可以处理的问题,我们为什么要用这么长的公式来代替
因为MATCH()函数有自身的特殊性,就是它只能返回第一个对应值的位置,当有多个数值时,就无法找到后面的数值,因此我们可以用ROW来辅助完成操作。
筛选算子
这里的筛选算子,就是通过多条件的“与”运算,最后将满足条件的参数赋为TRUE或1,不满足条件的得到FALSE或0,也就是我们能直接使用的算子,然后,根据我们筛选要具体要求,借助IF或其它的运算(如*ROW()),再配合MAX()这类的取值函数就可以得到我们需要的筛选结果。
比如说,上面的LARGE()+ROW()函数取位置的公式,其中也运用了筛选算子,其运算步骤如下:
=LARGE(($B$6:$B$11=$E$7)*ROW($1:$6),ROW(1:1))
=LARGE({0;0;1;0;0;0}*{1;2;3;4;5;6},{1})
再举一个两条件的筛选例子,如:
=(B17:B22=F18)*(C17:C22=G18)
上面的两个布尔数组相乘后,就可以得到={0;0;1;0;1;0},也就是说1就是满足我们筛选条件的值。
同样的道理,多条件时,我们只需要增加相应的判断子参数,再与前者进行乘积即可,最后总能将满足条件的以1展示出来。
不重复算子
不重复的原理,主要是使用MATCH()函数的特性,这个在前面的ROW()函数有略有提到,因为MATCH()函数查找时只会返回相同值的第一个位置,
根据这个条件,我们让需要确认是否重复的每个值与在自身内部进行MATCH()运算,那么没有重复的值,得到的MATCH()结果就与其位置是一致的,
相反,那些重复的值,得到的结果就是其第一次出现会值的位置,而不是重复值所在的位置。
=MATCH(A1:A6,A1:A6,)
当上面的结果,与每个值或字符所在的位置进行比较时,即={1;1;3;4;1;3}=ROW(1:6)
同样的道理,当我们查找不重复值是在一个字符串里,我们还可以使用FIND()函数来生成不重复算子,因为FIND()函数对于字符串来说,
参数驱动
主要传递给我们的思想就是向导,从基础入手,逐步展开,逐步将参数数组化从而实现参数驱动,一步步达到我们的数组公式要求。
比如说一个例子,是将B列的四个字符串或数字串在后面的四列里分别显示出来,他的作法是先水平扩展,再作垂直扩展:
即先在第一行,完成我们初期的目标,也就是说先将B1分别展示出来,公式如:=MID(B1,COLUMN(A:D),1)
现在我们是完成了第一步,下一步就是修改参数,将B1扩展为B1:B5,如=MID(B1:B5,COLUMN(A:D),1),那么就可以一步完成我们的展示要求。
INDEX(array,row_num,column_num)
Array
·
·
- 如果同时使用 row_num 和column_num,函数INDEX 返回 row_num 和 column_num 交叉处的单元格的数值。
SMALL(array,k)
Array
K
说明
- 如果 array 为空,函数SMALL 返回错误值 #NUM!。
- 如果 k ≤ 0 或 k 超过了数据点个数,函数 SMALL 返回错误值 #NUM!。
- 如果 n 为数组中的数据点个数,则SMALL(array,1)等于最小值,SMALL(array,n)等于最大值。
语法
MOD(number,divisor)返回两数相除的余数。结果的正负号与除数相同。
Number
Divisor
ExcelHome免费在线培训中心:http://t.excelhome.net
这篇关于我与数组公式有个约会之相识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!