天天看點

VBA數組(六)動态數組

VBA數組(六)動态數組

大家好,前面已經介紹過了如何聲明數組、數組指派、靜态數組和數組函數等等知識點,本節主要講解動态數組。

VBA數組(六)動态數組

動态數組的定義

VBA數組(六)動态數組

如果在聲明數組不确定數組的大小,先不固定數組的大小,而在程式在運作時使用Redim語句重新定義數組大小即為動态數組。(而如果聲明數組時即确定數組大小即為靜态數組。)

VBA數組(六)動态數組

聲明動态數組

VBA數組(六)動态數組

首先在使用者窗體、子產品或者過程中使用dim或public語句聲明一個沒有下标的數組。比如:

dim 數組名稱()

然後在程式過程中使用ReDim語句重新定義該數組的大小。具體完整語句如下:

ReDim [Preserve] 數組名(下界 to 上界) [ as 資料類型 ]

使用ReDim語句可以反複改變數組的大小和次元,但不能用ReDim語句更改已經聲明的資料類型,除非是預設的Variant所包含的資料。

使用ReDim語句對是否保留原值有兩種情況:

1、不保留原值

在預設情況下,使用RdDim語句重新定義數組大小和次元時,數組中原來儲存的值将全部消失。

即Redim 數組名(下标)[as 資料類型]。

下面通過幾個簡單的示例示範下:

VBA數組(六)動态數組

首先定義Arr1為動态數組,變量i和變量j為整形變量。通過ReDim語句重新定義Arr1為一維的1到3的數組。給數組中的3個元素一次指派。

然後用ReDim語句再次重新定義Arr1數組大小,此時在立即視窗中顯示Arr1(2)元素,已經沒有值了。

2、保留原值

在ReDim語句中使用Preserve關鍵字,隻能重新定義數組最後一維的大小,并且不能改變數組的維數,但可以保持原有數組中的原來的資料。(注意使用Preserve關鍵字,如果ReDim重新定義最後一維的範圍變小,多餘的元素也是會消失的。)

VBA數組(六)動态數組

同樣上面的示例中,如果ReDim語句加Preserve再次重新定義Arr1數組大小,此時在立即視窗中顯示Arr1(2)元素還是原來的值。

VBA數組(六)動态數組

示例

VBA數組(六)動态數組

下面通過其他兩個簡單的示例來幫助了解動态數組:

VBA數組(六)動态數組

首先聲明了動态數組Arr1,聲明變量i和變量j為長整型變量。

使用Range("a65536").End(xlUp).Row,即使用單元格對象的END屬性,獲得A列最後一行的行号。(在單元格對象屬性(二)章節有介紹。)即得到A列有值得單元格的數量。

通過ReDim語句重新定義Arr1數組的大小,範圍是從1 to i。實際就是有值得單元格的行号範圍。

通過For循環語句将單元格 Range("a" & j).Value的值指派給Arr1(j)。

最後在立即視窗中顯示Arr(3)元素值為range("A3")的值。

VBA數組(六)動态數組

首先聲明了動态數組Arr1,變量i和變量j為整形變量。

通過ReDim語句重新定義Arr1數組大小為二維數組,第一維範圍為1到2,第二維範圍為1到3。

通過雙循環嵌套結構,将Cells(i,j)單元的值指派給Arr1(i,j)元素。(實際上數組中元素的兩個次元索引号和單元格的cells屬性的行号和列号一一對應。)

這種方式在很多數組應用的案例中很常見,注意了解。

VBA數組(六)動态數組

本節主要介紹動态數組的内容,有問題可以給我留言,祝大家學習快樂。