ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1155095|回复: 3251

[原创] 一起来认识数组公式(最基础)

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-12-11 16:49 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:数组公式
======================写在前面=======================

      如果你是用Excel的人,相信你对“公式”这个概念并不陌生。
      可是,什么是数组公式?
      如果你是初学Excel的人,如果你对数组公式还不知道是什么回事,如果你对数组公式感兴趣,那么你可以试着读一读此贴,也许对你认识什么是数组公式,并去用好它会有一点点帮助。
      当然,这些只是一些最基础的知识,只是在你学习数组公式前帮助你练的一个基本功。希望对你有用,也希望大家在读贴的过程中能把自己的学习心得以及遇到的问题放出来,供大家一起学习。

[ 本帖最后由 ggsmart 于 2009-12-21 12:01 编辑 ]

评分

141

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-11 16:56 | 显示全部楼层

第一部分:了解数组公式

在开始讲数组公式之前,我们先来认识几个必要的概念。

1、数组
什么是数组?仁者见仁,智者见智。
我个人的感觉是:数组是具有某种联系的多个元素的组合。某班级里有50个学生,这里,如果班级是数组,50个学生就是数组里的50个元素。当然,班级里的元素是可变的,可以是20个,可以是30个,也可以是60个。放到Excel里,班级就相当于工作表,而学生就相当于工作表里的单元格数值。所以,Excel里的数组,我还把它理解是为多个单元格数值的组合。

2、公式
如果你在使用Excel,如果你说你还没听过“公式”这个名词,我只能说:“你太OUT了!”
什么是公式?我的理解是:Excel里,凡是以半角符号“=”开始的、具有计算功能的单元格内容就是所谓的Excel公式。如:=SUM(B2:D2)=B2+C2+D2这些都是公式。

3、数组公式
数组公式是相对于普通公式而言的。普通公式(如上面的=SUM(B2:D2)=B2+C2+D2等),只占用一个单元格,只返回一个结果。
数组公式可以占用一个单元格,也可以占用多个单元格。它对一组数或多组数进行多重计算,并返回一个或多个结果。
集合在教室外面的学生,老师把他们叫进教室。老师说:“第一组第一桌的同学进教室。”于是第一组第一桌的同学走进教室。老师接着叫:“第一组第二桌的同学进教室。”然后是第二桌的同学进教室。老师再叫:“第一组第三桌的同学进教室。”然后第三桌的同学走进教室。接着是第四桌,第五桌……,就这样一个学生一个学生的叫,这就是普通公式的做法,学生回到座位,就像数值回到工作表的单元格里,一个座位叫一次,就像一个单元格输入一个公式。
如果老师说:“第一组的全部进教室。”学生听到命令后,第一桌的同学走进去,然后是第二桌,第三桌……,老师不用再下第二个命令,这是数组公式的处理方法。

4、数组公式的标志
Excel中数组公式的显示是用大括号对“{}”来括住以区分普通Excel公式。
如图:
1)数组公式:
1-1.jpg


2)普通公式:
1-2.jpg


输入数组公式:用Ctrl+Shift+Enter结束公式的输入。
特别提醒:这是最关键的,这相当于用户告诉Excel:“我不是一般人,爷我是数组公式,你得对我特别关照。”于是,Excel明白了,不能用常规的逻辑来对待这位大爷。当你按下三键后,Excel会自动给公式加上“{}”以和普通公式区别开来,不用用户输入“{}”,但如是是想在公式里直接表示一个数组,就需要输入“{}”来把数组的元素括起来。
如:
1-3.jpg


=IF({1,0},D2:D8,C2:C8)这个公式里的数组{1,0}的括号就是用户自己输入的。

5、数组的维数
“维数”是数组里的又一个重要概念。数组有一维数组,二维数组,三维数组,四维数组……
在公式里,我们更多接触到的只是一维数组和二维数组。
一维数组我们可以简单地看成是一行的单元格数据集合,比如A1:F1一维数组的各个元素间用英文的逗号“,”隔开(如果是单独的一列时,用英文分号“;”隔开)。

1-4.jpg
{1,2,3,4,5,6},这就是一个有6个元素的一维数组,或者说,只有一行的数组。数组的各个元素间用逗号“,”分隔。如果想把这个数组输入到工作表的单元格里,同时选中同一行里相领的六个单元格,输入:={1,2,3,4,5,6}后,三键结束公式,你就可以看到这个一维数组被输入到工作表的单元格里了。
自己动手试一试。

二维数组可以看成是一个多行多列的单元各数据集合,也可以看成是多个一维数组的组合。如单元格A1:D3,就是一个三行四列的二维数组。我们可以把它看成是A1:D1A2:D2A3:D3这三个一维数组的组合。二维数组里同行的元素间用逗号“,”分隔,不同的行用分号“;”分隔。
我们可以用上面的方法,在A1:D3区域输入数据,并引用地址,按F9来查看。

1-5.jpg
可以看到在数组里,换行的时候,元素间的分隔符是“;”,所以,要判断一个数组是几行几列的数组,只需要看里面的逗号和分号就知道了。
如果需要把数把数组返回到单元格区域里,首先得看数组是几行几列,然后再选择相应的单元格区域,输入数组,三键结束。
对了,是哪三键你还不要忘记了:Ctrl+Shift+Enter
记住:
1)一维数组是单独的一行或一列。二维数组是多行多列。
2)数组里的元素,同一行内的各元素用英文逗号“,”分开,用英文分号“;”将各行分开。
3)二维数组的元素按先行后列的顺序排列。总是这样:{第一行的第一个,第一行的第二个,第一行的第三个……;第二行的第一个,第二行的第二个,第二行的第三个……;第三行的第一个……}

[ 本帖最后由 ggsmart 于 2010-9-11 20:40 编辑 ]

评分

77

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-11 17:03 | 显示全部楼层

第二部分:数组公式的初步认识

在对数组公式有了一个简单的了解之后,这贴我们将通过一些简单的例子来进一步认识数组公式。
问题1:在D2:D4求出商品的销售金额。
2-1.jpg
现在你解决这个问题会用什么办法呢?
我知道很小儿科,千万不要在心里骂我拿这种简单的问题来考你。
是的,很简单,在D2单元格输入公式“=B2*C2”,下拉公式即可。
2-2.jpg
在这里,D2:D4三个单元格输入了三个普通公式,分别返回了三个值在三个单元格里。这就是老师在点学生进教室,第一组第一桌的同学进教室入座,第一组第二桌的同学进教室入座……
我们试着用数组公式来解决这个问题,老师嗓子不好,让他叫一次我们就乖乖进教室去得了。
2-3.jpg
选中D2:D4输入公式“=B2:B4*C2:C4”,三键结束输入数组公式,即可得到同样的结果。
这就是一个多单元格的数组公式,多单元格数组公式是进行批量计算,可节省计算的时间,同时,它还有一个特点。当你输入完数组公式后,请你尝试修改公式区域里其中一个单元格的公式,看看会有什么结果。
2-4.jpg
是的,你已经发现了,会弹出一个对话框,提醒你:不能修改数组的某一部分。
这就是多单元格数组公式的一个重要的特点:保证公式集合的完整性不被修改。这可以防止用户在操作时无意间修改到表格的公式。这是不是会安全得多?
当然,如果你要修改公式的话,必须得选中公式所在的所有单元格。

问题2:在F1求出商品的销售总金额
2-5.jpg
这一题如果你用普通公式又怎么解决呢?我想象中可能有两种方法:
A、插入辅助列,先求出各商品的销售额,然后再求总和。
B、直接在F1输入公式“=SUM(B2*C2,B3*C3,B4*C4)”,这样看上去不错,可是,如果有100行数据,一千行号数据呢?先不考虑单元格能容纳多少字符的问题,就光输入公式,累也得把你累趴下,显然是行不通的。
这时候就需要用数组公式来完成了。
选中F1单元格,输入公式“=SUM(B2:B4*C2:C4)”,三键确认输入即可。
2-6.jpg
这是一个单个单元格的数组公式,B2:B4*C2:C4是两个一维数组相乘,返回一个新的一维数组,最后用SUM函数对返回的数组进行了求和。这里,用一个数组公式代替了多个公式的方式来完成了数据的计算。

做了这个问题,总结一下,什么时候会用到数组公式?
是的,当运算中存在着一些只有通过复杂的中间运算过程才会等到结果的时候,就需要使用数组公式了。
这一贴的内容非常简单,记住几点:
(1)三键输入数组公式。
(2)数组公式同时进行多个计算,可返回一个或多个结果。
(3)多单元格数组公式需选区多个单元格进行输入,多单元格数组公式具有保护公式的作用。
(4)数组公式可以完成复杂的中间运算得到最终想要的运算结果。



===附件===
(第二部分)数组公式的初步认识.rar (2.33 KB, 下载次数: 18621)

评分

66

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-11 17:19 | 显示全部楼层

第三部分:数组公式的计算

学习继续,在对数组有了基本的认识后,这贴我们将通过一些例子来讲一讲数组公式是怎么计算的。
1、行列数相同数组的运算 3-1.jpg
数组1+数组2,这是一个多单元格的数组公式,第一个数组的第一个元素与第二个数组的第一个元素相加,结果作为数组公式结果的第一个元素,然后第一个数组的第二个元素与第二个数组的第二个元素相加,结果作为数组公式结果的第二个元素,接着是第三个元素……直到第N个。
3-2.jpg

这是横向的一维数组的计算,原理同上。

3-3.jpg
这是二维数组与二维数组进行计算,生成一个新的二维数组的多单元格数组公式。同样的计算过程,第一个数组的第一行的第一个元素与第二个数组的第一行的第一个元素相乘,结果为数组公式的结果的数组的第一行的第一个元素,接着是第二个,第三个……直到第N个。

规律很简单:两个同行同列的数组计算是对应元素间进行运算,并返回同样大小的数组。
正如穿鞋要穿合脚的才走得了路一样,在公式或函数中使用数组时,运算对象或参数的数组维数要匹配,否则计算会出错。教室里,第一排的有8个同学,第二排有9个同学,老师说:“第一排和第二排的同学交换作业,互相检查。”第二排的第9个同学和谁交换?这就是数组的不匹配。数组不匹配时,工作就不能完成了。
你可以试着改一改数组的参数试试。

2、数组与单一的数据的运算
3-4.jpg
这相当于在E42单元格输入公式=A42*$C$42,然后下拉复制公式实现。
3-5.jpg

等同于在B56输入公式“=B52+$B$54”,然后右拉复制公式实现。
3-6.jpg

等同于在C67单元格输入公式“=A60+$E$60”然后右拉下拉复制公式实现。

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

3、单列数组与单行数组的计算
3-7.jpg
两个数组相加,查看结果是几行几列:在任意单元格输入公式“=A80:A83+B87:E87”,抹黑公式,按F9键,可看到公式的计算结果为数组“{110,210,310,410;120,220,320,420;130,230,330,430;140,240,340,440}”通看看分号与逗号,我们知道这是一个四行四列的数组,选择一个四行四列的单元格,输入公式“=A80:A83+B87:E87”,三键结束,可看到返回的结果为:
3-8.jpg
相当于在E80输入公式“=$A80+B$87”右拉下拉复制公式的结果。
单列数组与单行数组的计算:
A、计算结果返回一个多行列的数组;
B、返回数组的行数同单列数组的行数相同、列数同单行数组的列数相同。
C、返回数组中第R行第C列的元素是单列数组的第R个元素和单行数组的第C个元素运算的结果。

4、行数(或列数)相同的单列(或单行)数组与多行多列数组的计算
(1)单列数组的行数与多行多列数组的行数相同时:
3-9.jpg
(2)单行数组的列数与多行多列数组的列数相同时:
3-10.jpg
计算规律同单行单列的数组计算的规律大同小异:
A、计算结果返回一个多行列的数组;
B、返回数组的行、列数与多行多列数组的行列数相同;
C、单列数组与多行多列数组计算时,返回的数组的第R行第C列的数据等于单列数组的第R行的数据与多行多列数组的第R行第C列的数据的计算结果;
D、单行数组与多行多列数组计算时,返回的数组的第R行第C列的数据等于单行数组的第C列的数据与多行多列数组的第R行第C列的数据的计算结果。

=======留给你的思考题=======
讲到这里,我们可以暂停一下进度。课间休息,插播一段广告:
你可以喝杯水,听听音乐,然后我们来看几个例子:

图1:
3-11.jpg

图2:
3-12.jpg

图3:

3-13.jpg
上面的三张图,第一个公式是我们前面讲的例子,第二个公式是在第一个公式的基础上对参与计算的数组区域进行了修改,但是,两个不同参数的公式,返回的结果却都是一样的。这里我只是举了三个例子,你可以把前面我们讲过的公式里的数组参数都修改修改,什么情况下,会返回相同的结果呢?它们又有什么共同的地方?知识总是光顾那些善于总结和发现的人。否则,踩着别人的脚印走,想要看到别人没看到的风景,你要等到猴年马月?
好了,我也仿小学老师的口气问问大家:“为什么两个不同的公式,返回的结果都是一样的呢?从上面的图,你发现了什么?把你的发现说给你的伙伴听一听。”
这就是你今天的作业,如果你是真心想想学数组公式的,记得跟贴回复!

5、行、列数不相等的数组计算
(1)行数不相等的单列数组与与多行列数组的计算
3-14.jpg
(2)列数不相等的单行数组与多行多列数组的计算
3-15.jpg
(3)行、列数不相同的两个多行多列数组的计算
3-16.jpg
有了对前面例子的分析,再来看这三个例子就相对简单了。它们的计算规则和前面都是一样的,不难看出:
A、公式返回一个多行多列数组;
B、返回数组的行数与参与计算的两个数组中行数较大的数组的行数相同,列数与较大的列数的数组相同;
C、返回数组的大于较小行数数组行数、大于较大列数数组列数的区域的元素均为#N/A。有效元素为两个数组中对应数组的计算结果。
需要提醒一点的是,对会返回#N/A的数组,在进行再计算和处理时,考虑对#N/A值作相应的处理!
比如我们想对上面数组与数组2相加后的结果进行求和:
3-17.jpg
正确的公式(数组):=SUM(IF(ISNA(A213:B216+D213:F215),0,A213:B216+D213:F215))
通过ISNA函数对返回的数组里的各个元素进行了判断和处理,把把有的#N/A值替换成数值0,最后再用SUM函数对所有数值进行求和。
我们说,数组计算时,得注意行列数的匹配,其实如果了解了数组的计算原理后,能正确处理那些返回的#N/A值的话,很多时候,并不会出错的。


======附件=======
(第三部分)数组公式的计算.rar (7.34 KB, 下载次数: 14761)

[ 本帖最后由 ggsmart 于 2009-12-11 17:20 编辑 ]

点评

fdd
还差一种情况没有说: 行列相同的多行多列的两个数组如何运算?  发表于 2011-8-28 12:07

评分

48

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-17 12:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

第四部分:数组扩充

这一贴的内容相对比较简单,主要是对第三部分,数组的计算里提出的思考问题作出回复。昔日关云长温酒斩华雄的故事听过吧?如果你已认真读了前面的贴子,且用心总结了下,再来看此贴,相信你也会有“云长提华雄之头,掷于地上,其酒尚温”的豪气。
呵呵……嫌我唐僧了吧?那端上一杯热茶,快快进入主题,当读完贴后,你的茶是否喝完?
读完上一贴,了解了数组公式的计算规律后,我们知道,数组与数组计算,返回一个新的数组。返回的数组的行数与参与计算的数组中行数较大的数组的行数相同,列数与列烽较大的数组的列数相同。
但“为什么两个不同的公式,返回的结果却相同呢?”,这就是我们今天要讲的一个新概念——数组扩充。

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

例1:
公式:=SUM({10,20,30,40}*10)里,第一个参数{10,20,30,40}是一行四列的数组,第二个参数不是数组,只是一个数值,为了让第二个数值能与第一个数组进行专题片,这时,Excel会自动将第二参数的10扩充成一个一行四列的数组{10,10,10,10}与第一参数匹配。所以,SUM({10,20,30,40}*10) 最后是使用SUM({10,20,30,40}*{10,10,10,10}) 进行计算,得到的结果是10*10,20*10,30*10,40*10的和。
4-1.jpg

例2:
公式:={10;20;30;40}+{100,200}的第一个参数{10;20;30;40}是一个四行一列的数组, {100,200}是一个一行二列的数组,在计算时,Excel会将第一个数组自动扩充为一个四行二列的数组{10,10;20,20;30,30;40,40},也会将第二个数组扩充为一个四行二列的数组{100,200;100,200;100,200;100,200},所以={10;20;30;40}+{100,200}这个公式最后是使用公式={10,10;20,20;30,30;40,40}+{100,200;100,200;100,200;100,200}进行计算。公式最后返回的数组也是一个四行二列的数组,数组的第R行第C列的元素等于扩充后的两个数组的第R行第C列的元素的计算的结果。
4-2.jpg
好了,在这一贴要讲的已经讲完了。 “数组扩充”这个华雄是否已被你斩于马下?也不知道你手里的茶喝完了没?我希望听到你回答的是:“华雄已斩,茶没喝完,还温着呢。”有兴趣,记得跟贴告诉我一声。呵呵……

继续喝茶,休息。顺便听我再给你唠叨几句。

班里有50个学生,为了让每个学生都有座位,需要预备50套课桌椅。如果只有30套课桌椅,那最后进教室的20个同学将没有座位,如果有60套课桌椅,将会有10套课桌椅空在教室里而别的班级需要课桌椅的同学又不能使用。浪费啊……
学生就像数组里的元素,输入数组公式返回数组的元素就像叫学生进教室,我们得给他们准备好合适的座位。所以输入多单元格数组公式时,应先选中需要返回数据的单元格区域,选中的单元格区域的行、列数应与返回数组的行、列数相同。否则,如果选中的区域小于数组返回的行列数,站在教室里,我们只能看到占了座位的这群学生。如果选择的区域大于数组返回的行列数,那超出的区域将会没有学生去坐而返回#N/A值。
4-3.jpg

=============例子附件===============
(第四部分)数组扩充.rar (3.25 KB, 下载次数: 10075)

[ 本帖最后由 ggsmart 于 2010-8-20 23:18 编辑 ]

评分

33

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-17 12:47 | 显示全部楼层

第五部分:公式的解读

有人说,不喜欢数组公式。原因是太复杂,看不懂。
所以,先讲一讲公式的解读,对初学的人来说,应该是很有必要的。
对于公式的解读,论坛上已经有很多的例子了,所以,我也没有什么新的东西可以跟大家讲。在这里,我把前辈们的经验总结一下,和大家分享。
1、利用F9键
这好像是大家在解读公式的时候用得最多的一个功能了。想知道某段公式的运行结果是什么?在编辑里,用鼠标选中需要进行计算的某段公式,将其抹黑,然后按F9键,就得到了公式的计算结果。这个功能我们在前面讲数组维数的时候已经用到了,这里不再多讲。
需要提醒的是:当你对公式按F9键进行求值后,返回的时候记得按Esc键,或者点编辑栏左侧的“取消”按钮。否则公式就变成你求值后的样子了。
5-1.jpg
2、利用公式求值
要看懂复杂的公式,公式审核的的帮助是很大的。
选择需要公式求值的单元格,点击“工具—>公式审核—>公式求值”,调出公式求值对话框。
5-2.jpg
点击“求值”铵钮,可以逐步对公式进行计算,将公式每一步的运算结果展示出来。
5-3.jpg

3、利用插入函数
对于复杂公式的结构分析、分段理解,使用插入函数功能是很方便的。
点鼠标左键,将光标定位到编辑栏里公式的某个地方。点击“插入——>函数”菜单命令:

5-4.jpg
这时,弹出函数参数的对话框,它会对我们的公式进行分段解析。

5-5.jpg
当然,你也可以直接点击编辑栏左边的插入函数命令按钮来调出对话框。
5-6.jpg

评分

34

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-12-21 12:25 | 显示全部楼层
本帖最后由 ExcelHome 于 2012-10-6 16:33 编辑

嗯,好帖,叶枫辛苦。我想很适合初学的人。

TA的精华主题

TA的得分主题

发表于 2009-12-21 14:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-12-21 14:16 | 显示全部楼层
写得不错,下了很大的功夫,对初学数组的新手是一个福音!
感谢楼主的辛劳!

不过有几处提到:
一维数组的各个元素间用英文的逗号“,”隔开。

这个说的不够准确。
行数组是以逗号隔开的,列数组却是以分号隔开的。

TA的精华主题

TA的得分主题

发表于 2009-12-21 14:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
适合我这种初学者
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-10-5 23:20 , Processed in 0.054404 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表