Visual Basic for Application 中的數組

Visual Basic for Application 中的數組是通常存儲相同類型的相關變量集的結構。 數組條目通過其數字索引訪問。

例如,有一個 20 人的團隊,他們的名字需要保存以供以後在 VBA 代碼中使用。 可以簡單地聲明 20 個變量來保存每個名稱,如下所示:

將 Team_Member1 調暗為字符串 將 Team_Member2 調暗為字符串 ... 將 Team_Member20 調暗為字符串

但是您可以使用更簡單、更有條理的方式——將團隊成員姓名列表存儲在 20 個變量的數組中,例如 :

將 Team_Members(1 到 20) 調暗為字符串

在上面顯示的行中,我們聲明了一個數組。 現在讓我們為其每個元素寫入一個值,如下所示:

Team_Members(1) = "約翰·史密斯"

當需要對數組的每個元素執行相同的操作時,與使用單獨的變量相比,將數據存儲在數組中的另一個優勢變得明顯。 如果團隊成員的姓名存儲在 20 個單獨的變量中,那麼每次需要編寫 20 行代碼才能對每個人執行相同的操作。 但是,如果名稱存儲在數組中,那麼您可以使用簡單的循環對每個名稱執行所需的操作。

下面通過一個代碼示例演示它是如何工作的,該示例在列單元格中按順序打印每個團隊成員的姓名。 A 活動的 Excel 工作表。

For i = 1 To 20 Cells(i,1).Value = Team_Members(i) Next i

顯然,使用存儲 20 個名稱的數組比使用 20 個單獨的變量要簡單得多,而且更準確。 但是如果這些名字不是 20 而是 1000 呢? 另外,如果還需要將姓氏和父名分開保存?! 很明顯,如果沒有數組的幫助,在 VBA 代碼中處理如此大量的數據很快就會變得完全不可能。

Excel Visual Basic 中的多維數組

上面討論的 Visual Basic 數組被認為是一維的。 這意味著它們存儲了一個簡單的名稱列表。 但是,數組可以有多個維度。 例如,可以將二維數組與值網格進行比較。

假設您要保存 5 個不同團隊 5 月份的每日銷售數據。 這將需要一個包含 31 天的 XNUMX 組指標的二維數組。 讓我們像這樣聲明一個數組:

Dim Jan_Sales_Figures(1 到 31, 1 到 5) 作為貨幣

訪問數組元素 一月銷售數據,您需要使用兩個索引來指示月份中的日期和命令編號。 例如,包含銷售數據的元素的地址 2-哦 團隊為 15日 一月會這樣寫:

Jan_Sales_Figures(15, 2)

同樣,您可以聲明一個具有 3 個或更多維度的數組——只需在數組聲明中添加額外的維度並使用額外的索引來引用該數組的元素。

在 Excel Visual Basic 中聲明數組

在本文前面,我們已經看過幾個在 VBA 中聲明數組的示例,但這個主題值得仔細研究。 如圖所示,一維數組可以這樣聲明:

將 Team_Members(1 到 20) 調暗為字符串

這樣的聲明告訴 VBA 編譯器該數組 團隊成員 由 20 個變量組成,可以在從 1 到 20 的索引處訪問它們。但是,我們可能會考慮將數組變量編號從 0 到 19,在這種情況下,數組應該聲明如下:

將 Team_Members(0 到 19) 調暗為字符串

實際上,默認情況下,數組元素的編號是從 0 開始的,而在數組聲明中,可能根本沒有指定初始索引,像這樣:

將 Team_Members(19) 調暗為字符串

VBA 編譯器會將此類條目視為聲明一個包含 20 個元素的數組,其索引從 0 到 19。

聲明多維 Visual Basic 數組時適用相同的規則。 如其中一個示例所示,在聲明二維數組時,其維度的索引用逗號分隔:

Dim Jan_Sales_Figures(1 到 31, 1 到 5) 作為貨幣

但是,如果您沒有為數組的兩個維度指定起始索引並像這樣聲明它:

Dim Jan_Sales_Figures(31, 5) 作為貨幣

那麼這個條目將被視為一個二維數組,它的第一維包含 32 個索引從 0 到 31 的元素,數組的第二維包含 6 個索引從 0 到 5 的元素。

動態數組

上述示例中的所有數組都有固定的維數。 但是,在許多情況下,我們事先並不知道數組的大小。 我們可以通過聲明一個巨大的數組來擺脫這種情況,它的大小肯定會比我們的任務所需的大。 但是這樣的解決方案將需要大量額外的內存並且會減慢程序的速度。 有一個更好的解決方案。 我們可以使用動態數組——這是一個數組,其大小可以在宏執行期間任意設置和更改。

使用空括號聲明動態數組,如下所示:

將 Team_Members() 調暗為字符串

接下來,您需要在代碼執行期間使用表達式聲明數組的維度 重新調暗:

ReDim Team_Members(1 到 20)

如果在執行代碼的過程中你需要再次改變數組的大小,那麼你可以再次使用 ReDim 表達式:

If Team_Size > 20 Then ReDim Team_Members(1 To Team_Size) End If

請記住,以這種方式調整動態數組的大小會導致數組中存儲的所有值丟失。 為了將數據存儲在數組中,您需要使用關鍵字 保留如下圖所示:

If Team_Size > 20 Then ReDim Preserve Team_Members(1 To Team_Size) End If

不幸的是關鍵字 保留 只能用於更改數組維度的上限。 不能以這種方式更改數組的下限。 另外,如果數組有多個維度,那麼使用關鍵字 保留,只有數組的最後一個維度可以調整大小。

發表評論