vba 陣列(動態陣列)

2021-06-18 18:38:17 字數 2733 閱讀 1932

主要內容: 本文章主要介紹vba中,陣列的使用,特別介紹動態陣列的使用,並有簡單事例,幫助理解。

陣列是我們經常用到的儲存資料的一種媒介,他到底是什麼呢?

陣列是具有相同資料型別並且共享乙個名字的一組變數的集合。通俗的說,陣列是變數

陣列的宣告

可以用dim語句或者public語句生命陣列。

如:dim/public 陣列名 (a to b) as 資料型別

a 和b 是陣列中元素的個數,陣列元素素最小值為a,最大值為b,元素個數為(b-a+1),當然,你也可以直接輸入個數,此時預設最小索引號為0。  

如:

dim myarr(5) as integer

上面定義的只是一維陣列,你還可以定義二維、三維、四維…….

如:

dim myarr(1 to 5,1 to 10) as integer

這就是乙個二維陣列,元素個數為5*10=50個

在程式設計的過程中,定義陣列的時候我們可能不能確定陣列的元素個數,對陣列進行宣告後,可以在執行時用redim語句重新指定陣列的大小。

當就涉及動態陣列。

1、動態陣列的定義

動態陣列的定義,一開始不需要給陣列標明上界和下界。直接定義即可,如下面的**:

dim mystr() as string

這樣,就定義了乙個動態陣列及其名稱:mystr(),現在,該陣列的上界下界都是個未知數,也就是說,陣列中到底有沒有內容或到底有什麼內容,是個未知數。

因此,要使用動態陣列,就必須對其定義好下界和上界。

2、給動態陣列確定下界和上界

給動態陣列重新確定下界和上界,那麼,分兩種情況。

①保留原值

採用此**:redim preserve mystr(n) 'n為陣列長度

②不保留原值

採用此**:redim mystr(n) 'n為陣列長度

③以上兩種情況的例項

下面我們看如上兩種情況的小例項:

比如:

dim mystr() as string

redim mystr(2)

mystr(0)=」1」

mystr(1)=」2」

現在,這個動態陣列有兩個值了,分別是0和1,現在,我們再重新確定該陣列的長度。

當然,重新確定自然又有兩種情況了。

a、保留原有資料

redim preserve mystr(3) '原來長度是2,現在重新確定為3,並且,保留原有的資料。

mystr(2)=」3」 '現在,該陣列就有三個值了,分別是:

mystr(0)為1、mystr(1)為2、mystr(2)為3

b、不保留原有資料

如果我們使用如下**

redim mystr(3)

mystr(2)=」3」

現在,該陣列的長度儘管為3,但是,裡面卻只有乙個資料了,那就是,mystr(2)的值是3,而mystr(0)和mystr(1)裡面,什麼都沒有。

關鍵字:preserve的作用就的保留原有值,請根據需要加以取捨。

3、動態陣列與excel的結合使用例項

dim n as integer

n = 0

dim mystr() as string

for i = 1 to sheet1.usedrange.rows.count

for j = 1 to sheet1.usedrange.columns.count

n = n + 1

redim preserve mystr(n) '給動態陣列重定義乙個實際的大小

mystr(n - 1) = sheet1.cells(i, j).value '存到動態陣列裡去

next j

next i

for each myarray in mystr

msgbox "陣列的值是" & myarray

next

以上**的功能是:將sheet1中已經有資料的單元格區域,通過vba**迴圈找到每行每列對應的單元格的值,通過對話方塊顯示出來。

注意哦,陣列的使用,其下界都是從0開始的。

4、計算陣列長度

例子:  

dim mystr() as string

陣列長度為: ubound(mystr)-lbound(

mystr

)(上下界相減)

5、二維動態陣列

例子:

dim arrsamestr() as long

redim preserve arrsamestr(1 to str5, 1 to 4)

和一維陣列一樣,只是定義兩個值 。

VBA動態陣列簡單應用

vba動態陣列簡單應用 動態陣列在vba中,用於篩選大資料是比較好用的.當一行資料滿足篩選要求時,將該行資料寫入到新的陣列中,逐維增加,最後再將這個新的陣列輸出到 動態陣列和一靜態陣列定義不同 靜態陣列定義 dim arr 動態陣列定義 dim arr 重新定義動態陣列 redim arr 1 to...

vba 陣列 陣列引數

關於賦值 我看了很多本書都沒有看到這樣子的,包括官方文件,所以我就寫了下來。sub a dim a dim c a array 1,2,3,4 這裡a後面的 可以給也可以不給 c a end sub寫法一 sub a paramarray a as variant paramarray 可以用byr...

VBA陣列賦值

先說一下,剛才乙個錯誤的操作,連儲存的草稿都沒了,這也太懸了。以後還是在本地寫好了再放上來。陣列是這樣賦值的 dim a2 10 as integer 10是可以使用的最大上標,這和c語言不太一樣 dim a3 2 to 10 as integer 也可以定義下標 dim a1 as integer...