中的数组。
数组(array,繁体版称作阵列),是由数据元素组成的集合,数据无素可以是数值,文本,日期,逻辑,错误值等。数据元素以行和列的形式组织起来,构成一个数据矩阵。
在excel中,根据构成元素的不同,可以把数组分为常量数组和单元格区域数组。1.1.常量数组。
常量数组可以同时包含多种数据类型。它用{}将构成数组的常量括起来,行中的元素用逗号“,”分隔,行之间用分号“;”分隔。数组常量不能包含其他数组、公式或函数。
当输入如下所示的公式时,excel将显示警告消息:或。另外,数值不能包含百分号、货币符号、逗号或圆括号。
例如,是一个1行4列的常量数组,而则为一个2行3列的常量数组。1.2.单元格区域数组。
单元格区域数组则是通过对一组连续的单元格区域进行引用而得到的数组。在数组公式中是一个4行2列的单元格区域数组。数组的维数。
数组作为数据的组织形式本身可以是多维的,而且众多编程都支持多维数组,但是excel的公式中最高只支持2维数组(也就是行列构成的数组)。关于这个结论,在网络搜索不到明确的答案,做这个结论基于以下两点:
excel不支持形如或的书写格式,所以无法表示3维或多维数组。
在excel中提供对数组引用的函数为index(),它的格式为index(array,row_num,column_num),它只有行列两个参数,而没有引用高于2维数组的参数。index函。数。
也。有。这。样。
的。格。
式。index(reference,row_num,column_num,area_num),它提供了第三个引用参数,是不是说明excel提供了对3维数组的引用呢?答案是否定的,reference可以使用多个区域(区域之间有逗号隔开)构成的参数,第三个参数area_num是用于指定reference中第几个区域的,如index((a1:
c6,a8:c11),1,1,2)中第三个参数只是指定区域a8:c11而已。
excelvba支持多维数组。1.4.数组的引用。
在运算过程中,可能需要引用数组中的某一个元素、某一行或某一列。下面介绍元素、行、列的引用方法。元素的引用:
对于1维数组index(array,c),对于2维数组index(array,r,c)。其中r表示第几行,c表示第几列,一般为正整数。
当r为小数时,会舍弃小数点后的部公(非四舍五入),如index(array,1.2, 2.9)等同于index(array, 1, 2)。
编程语言一般默认以截取的方式处理小数转整数的操作,这样可以提高效率,excel做这样的处理也。
是在意料之内的。行引用。
index(array, r, 0)返回第r行数据构成的数组。列引用。
index(array, 0 ,c)返回第c列数据构成的数组。
特殊的,index(array,0,0)将返回整个2维数组。而index(index(array,r, 0),c)、index(index(array,0, c),r)和index(array, r, c)相同,都可以返回第r行第c列的元素。1.
5.数组的算术运算和数组的扩展。
当数组进行运算(加、减、乘、除、幂)时,要求两个数组具有相同的维数,如果是2维数组还要求两数组的行数相同,列数也相同。满足这个条件的两个数组的算术运算(加、减、乘、除、幂)等于对应元素之间进行数**算。如两个具有3行3列的2维数组之间的加法运算为:
如果参与运算的两个数据的维数不同、行数不同或列数不同,excel会对数据的维数和行列进行扩展,以满足上述的要求而进行运算。扩展的规则如下:
维数扩展:如果两数据的维数不同时,维数低的数据会被扩展为和维数高的数据的维数相同。维数的扩展有两种类型,常数向1维数组或2
维数组的扩展、1维数组向2维数组扩展。
行列扩展:如果两数据的行数不同,行数低的数据会扩展为和行数高的数据的行数相同。如果列数不同,列扩展的规则和行扩展相同。如果行列均不相同,那么行列都需要扩展。
根据这些原则,一个m1行、n1列的数组和一个m2行、n2列的数组运算后,得到的是max(m1, m2)行、max(n1, n2)列的数组。这个结论包含了所有类型数据的运算。例如和运算,前者m1=2,n1=3,后者m1=1,n2=4,结果为2行4列的数组。
数据扩展后,出现了一此数据空位,如计算下列数组时。
首先要把(1 2)扩展为。
这时出现了一些数据空位,那么excel如何填充这些空位的呢?这里也有规则可循,个人用实验的方法总结如下:对常数所有的扩展,空位都填写该常数。
当行数组进行行扩展时,扩展出来的每一行的数据和首行相同;当行数组进行列扩展时,扩展列的数据填写错误值#n/a。
当列数组进行列扩展时,扩展出来的每一列的数据和首列相同;当列数组进行行扩展时,扩展行的数据填写错误值#n/a。
当2维的数组进行行扩展或列扩展时,扩展出的数据都填写错误值#n/a。因此,上边那个例子,(1 2)应该扩展为:
因此计算的结果为:
有了这些规则,就可以进行任意数组、常数间的算术运算了。2.数组公式2.1.什么是数组公式。
数组公式是指可以在数组的一项或多项上执行多个计算的公式。数组公式可以返回多个结果,也可返回一个结果。2.2.数组公式的输入。
输入数组公式后,同时按下ctrl+shift+enter,数组公式的外面会自动加上大括号{}以和普通公式区分。{}不是手工输入的,那样excel会认为您输入的是文本格式。数组公式每次编辑过后,都要同时按下ctrl+shift+enter以完成输入。
2.3.多单元格公式和单元格公式。
如果把数组公式的返回值放入到一个单元格区域内可以呈现返回数组的各个元素的值,这样的公式称为多单元格公式。而位于单元格中的数组公式称为单元格公式。
多单格公式在使用时,需遵循以下原则:
必须在输入公式之前选择用于保存结果的单元格区域,这个区域最好和返回的数组尺寸相同,否则在超出数组尺寸范围外的单元格填写#n/a。
不能更改多单元格数组公式中部分单元格的内容,但可以移动或删除整个数组公式。换言之,要编辑数组公式,需先删除现有公式再重新开始。
不能向多单元格数组公式中插入空白单元格(包括插入新行、列、单元格)或删除其中的单元格。这和“不能更改多单元格数组公式中部分单元格的内容”是一致的。2.4.数组公式的优点。
简洁性:数组公式可以同对多个数据执行多个运算。解决一个复杂的问题可以只需要一个公式,而用普通公式可能需要多步运算,甚至要填加辅助列。
不过,数组公式可以用几个一般公式和一些过渡数据来代替,从而达到同样的目的,所以千万不要迷信数组公式,以免走火入魔!
一致性:多单元格数组公式中,点击任一个单元格,看到的公式内容都是相同的。这种一致性可以保证更高的准确性。
安全性:不能覆盖多单元格数组公式的组成部分,可以防止误操作。文件小:
通常可以使用单个数组公式,而不必用多个中间公式。这在数据量很大的时候效果才会明显。2.
5.数组公式的语法。
数组公式主要使用标准公式语法。它们都以等号开始,可以在数组公。
式中使用任何内臵excel函数。使用数组公式的主要不同之处在于:必须按ctrl+shift+enter输入公式。
输入多单元格公式时,必须首先选择用于保存结果的单元格区域2.6.数组函数示例。
1.计算一个区域内,不重复的数据的个数。(个人认为这是数组函数最精彩的例子,正是这个例子激发了我学习数组公式的兴趣),这里假设区域为a1:
a100。分析:countif(range, criteria)在range范围内查找criteria,并返回它的个数。
假设a1单元格内的数据为x在a1:a100范围内共有n个数据x。那么数组公式对这100个单元格逐个计算1/countif(a1:
a100,某一单元格),当对a1计算时,返回结果1/n,在这100次计算里,每遇到数据x就回返回一个1/n,共返回n个1/n,求和为1。也就是说,有多少个不同的数据就返回多少个1,恰好就是不重复的数据的个数。这个公式是多么简洁优美!
不过再美好的事物也是有缺点的,统计区域内不得有空单元格,否则返回#div/0!错误。可以用下面的数组公式解决这个问题:
=sum(if(a1:a100<>"1/countif(a1:a100,a1:a100))}
当然这个问题也可以用sumproduct()、frequency()或match()实现。2.計算1+2+3+….
100的和。(假設不知道等差求和公式)或注意:row()的运算结果可以做很多函数的参数。
3.條件求和。
abcd产品生产日期产品产品编号。单价数量。
10bb2009/8/15211bb2009/8/20212cc2009/10/10313cc2009/10/15314dd2009/10/20415dd2009/10/304求產品bb的8月份產量。
=sum(if((b2:b15="bb")*month(c2:c15)=8), e2:
e15, 0))}注意:这里if用的判断条件为(b2:b15="bb")*month(c2:
c15)=8),8
如果把这部分改为and(b2:b15="bb",month(c2:c15)=8),则不能工作。
起初这另我很不解,但仔细研究and()发现,and()处理常量数组和单元格区域数组的方式是不同的。当处理常量数组时,运算结果还是数组。如=index(,,2)结果为false。
当处理受单元格区域数组时,会把数组内的所有的数据都取出来作为多个参数,运算最终结果不是一个数组,而仅仅是一个逻辑值。如=index(and(b2:b15="bb", month(c2:
c15)=8),1)会得到#value!。因此,这个公式在运算时,and(b2:b15="bb", month(c2:
c15)=8)的计算值为false,最终计算结果为零。
另外,逻辑值是可以直接参与算术运算的,这时true=1,false=0,因此下面这个公式可以简化为:
=sum((b2:b15="bb")*month(c2:c15)=8)*e2:e15)}求产品bb和cc的总产值。
=sum(if((b2:b15="bb")+b2:b15="cc"),e2:e15*d2:d15))}这个公式可以简化为:
=sum(((b2:b15="bb")+b2:b15="cc"))e2:e15*d2:d15)}
Excel中数组函数的运用 excel函数
excel中数组公式非常有用,尤其在不能使用工作表函数直接得到结果时,数组公式显得特别重要,它可建立产生多值或对一组值而不是单个值进行操作的公式。输入数组公式首先必须选择用来存放结果的单元格区域 可以是一个单元格 在编辑栏输入公式,然后按ctrl shift enter组合键锁定数组公式,excel...
excel数组公式入门
我们经常在一些excel函数公式两边看到添加有大括号 我想大部分新手同学看到大括号就晕。以后写的函数教程中也常会出现它。到底这个大括号是什么神秘符号,今天很有必要提前介绍一下。想学好函数的同学也一定要耐心把下面的教程看完。先从一个简单的计算公式说起 a1 b1它的结果为20,只有一个数。而如果让多个...
excel所有excel函数
用途 返回一组数据与其平均值的绝对偏差的平均值,该函数可以评测数据 例如学生的某科考试成绩 的离散度。语法 edev number1,number2,参数 number1 number2 是用来计算绝对偏差平均值的一组参数,其个数可以在1 30个之间。实例 如果a1 79 a2 62 a3 45 a...