標籤:

數組(一):基本原理

「函數」學習系列第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


    推薦閱讀:

    js取數組兩個數組的交集|差集|並集|補集|去重
    Excel數組公式應用徹底醒悟
    4分鐘寫完C語言動態數組
    Excel|sumif()相當於包含sum()函數的數組公式
    數組公式入門——開開啟函數公式的新大門

    TAG:原理 | 數組 |