|
楼主 |
发表于 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的和。
例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列的元素的计算的结果。
好了,在这一贴要讲的已经讲完了。 “数组扩充”这个华雄是否已被你斩于马下?也不知道你手里的茶喝完了没?我希望听到你回答的是:“华雄已斩,茶没喝完,还温着呢。”有兴趣,记得跟贴告诉我一声。呵呵……
继续喝茶,休息。顺便听我再给你唠叨几句。
班里有50个学生,为了让每个学生都有座位,需要预备50套课桌椅。如果只有30套课桌椅,那最后进教室的20个同学将没有座位,如果有60套课桌椅,将会有10套课桌椅空在教室里而别的班级需要课桌椅的同学又不能使用。浪费啊……
学生就像数组里的元素,输入数组公式返回数组的元素就像叫学生进教室,我们得给他们准备好合适的座位。所以输入多单元格数组公式时,应先选中需要返回数据的单元格区域,选中的单元格区域的行、列数应与返回数组的行、列数相同。否则,如果选中的区域小于数组返回的行列数,站在教室里,我们只能看到占了座位的这群学生。如果选择的区域大于数组返回的行列数,那超出的区域将会没有学生去坐而返回#N/A值。
=============例子附件===============
(第四部分)数组扩充.rar
(3.25 KB, 下载次数: 10075)
[ 本帖最后由 ggsmart 于 2010-8-20 23:18 编辑 ] |
评分
-
33
查看全部评分
-
|