分享

数组(一):基本原理

 L罗乐 2016-10-26

「函数」学习系列第3


        数组是Excel中最重要的概念之一,不仅在函数中有着广泛的应用,而且在VBA中也不发挥着不可替代的作用。数组公式往往具有便捷、巧妙的特点,而在VBA中运用数组代替单元格引用不仅可以提高代码的效率,而且还能大幅度降低程序运行的时间。另外,VBA中的常用对象如字典等其实质就是数组运算。如果想要成为Excel高手,数组是必须熟练掌握的知识,在VBA中也是重要内容。


  • 1. 基本分类


       数组,也就是数学上所称的矩阵或者向量,只不过数组是Excel对这些概念的特有称呼而已。数组大小由行和列的数目指定,m行和n列的数组具有m*n个元素。根据存在形式的不同,数组可以分为区域数组、内存数组和常量数组三大类。

       ①区域数组是最常见的数组形式,即单元格引用。比如A1(1行1列的数组)、A1:C2(2行3列的数组等)。区域数组最大的特点就是数组各元素的值依赖于单元格区域,比如区域数组A1:C2第1行第2列的元素的值就是单元格B1的内容,随B1而变。

       ②内存数组则是与区域数组相对的概念,其各元素不依赖于单元格区域。内存数组是公式在计算时临时存储在内存中的,这是它与常量数组的区别。

       ③常量数组是指元素值由用户指定的内存数组,用大括号“{}”表示。其中以分号“;”区分行,以逗号“,”区分列。常量数组的元素可以是数值、日期、文本和逻辑值等变量。

       比如{1,”成绩”,12;2,3,True}就是2行3列的常量数组。


  • 2. 数组运算

           

        下面介绍数组之间的运算规则。

        数组之间的运算最重要的规则是数组对应元素的相应运算。以数组A(m行n列)和数组B(a行b列)为例,假设A和B运算结果为数组C。若A和B大小不一致,则数组之间的运算规则相对复杂。

        设※为运算符(※可以是算术运算符、文本运算符和逻辑运算符等),则定义数组A和B运算后得到数组C,记为:

A※B = C

     

         (1)若A和B大小一致

           若A和B大小一致,则两者之间的运算即很简单,所得数组C是和A、B同等大小的数组。假设A和B都是3行2列的区域数组(A为区域D3:E5,B为区域G3:H5),而数组C=A B,并放置在D7:E9区域。首先我们选中D7:E9区域,在公式输入框中输入” =D3:E5 G3:H5”,并以组合键Ctrl Shift Enter结束,如下图。



      (2)若A和B大小不一致

        若A和B大小不一致,数组运算则相对复杂。首先,返回结果数组C的大小与A和B的大小有关。假设A是m行n列数组,B是a行b列数组,而C是x行y列数组,则C的行数等于A、B的行数中的最大值,列数等于A、B的列数中的最大值,即:

x=max(m,a);y=max(n,b)

        因此,在数组运算时A、B需要进行行列扩展,A和B的行列需扩展至和C同样的大小,下面我分情况介绍行列扩展的规律。

 ①A和B都是一维数组

 假设A是3行1列的行数组(C3:C5),B是1行3列的列数组(E3:G3),则A与B相加后的结果C是3行3列的数组。因为A是3行1列的数组,则需扩展成3行3列的数组(扩展后的A数组的第2、3列和第1列一样),同理B也扩展成3行3列的数组(扩展后的B数组的第2、3行和第1行一样),如下图。



        因此,扩展后的A数组与扩展后的B数组相加(对应元素相加),得到结果C(放置在C7:E9区域)。


②A和B都不是一维数组

 假设A是2行2列的行数组(C3:D4),B是3行3列的列数组(C6:E8),则A与B相加后的结果C是3行3列的数组。因为A是2行2列的数组,则需扩展成3行3列的数组,因为A是2行2列的数组,所以扩展至3行3列时Excel无法判断参照的行与列,扩展的第3行和第3列返回错误值“#N/A”,如下图。



因为B的大小和C的大小一致,所以数组B不需要扩展。扩展后的A数组与扩展后的B数组相加(对应元素相加),得到结果C(放置在C10:E12区域)。


 注意:数组的扩展规律可以总结成一句话:以行扩展为例,A数组若只有1行则行扩展时参照A数组的第一行,若不只1行(>=2)则行扩展时扩展的行返回错误值“#N/A”;列扩展亦同理。



 
 
 

文件分享下载:
https://pan.baidu.com/s/1slMqAYD   





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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多