Excel VBA中集合collection方法的基礎知識

Excel VBA中集合collection方法的基礎知識

Sub test()

' Dim s As Collection '定義s變量為集合對象

' Set s = New Collection '初始化集合對象s (否則無法使用)

Dim s As New Collection '推薦這句代碼,直接初始化,可以不用再Set了

'集合s中添加元素的方法

For i = 1 To 10

s.Add i '對於集合s,用Add方法可以加入集合元素

'當然事實上你可以添加任意內容來代替本例中的i

Next

'讀取集合中元素的方法

For i = 1 To s.Count '可以用Count屬性返回集合中元素總個數

t = s(i) '讀取集合s中第i個變量存入臨時變量t中

t = s.Item(i) '正規的代碼寫法應該是這樣子(效果一樣,推薦用上一句更簡明)

Debug.Print s(i) '在立即窗口中觀察s(i)的值

Next

'下面是集合s中元素刪除的方法

For i = 1 To s.Count '遍歷集合元素

s.Remove (1) '每次刪去第1個……直至全部刪除完畢 或直接簡寫為: s.Remove 1

' s.Remove (s.Count) '或者每次刪除最後一個,直至全部刪除完畢(推薦用上一句,不容易錯)

' 或簡寫為 s.Remove s.Count

Debug.Print s.Count '在立即窗口中觀察集合s中剩餘元素個數

Next

End Sub

Excel VBA中集合collection方法的基礎知識

集合是什麼?

集合是用戶定製的一組數據信息,存放於一個一維數組中,以便用戶隨時訪問、增添、刪除同類信息。

這個集合的定義,完全是由用戶做主,對集合中的數據類型,沒有任何限制……

完全取決於用戶是否願意根據某些自己確定的規則把符合要求的信息內容加入集合。

即,集合中元素可以是各種類型的數值、或文本,或單元格區域,或圖片……

…………

剛才說集合是一個一維數組,那麼為啥不直接讓用戶自建一個一維數組來存儲信息,

而要開發集合對象方法這樣一個東東呢?

呵呵,因為集合方法中的一維數組有以下特點,可以簡化處理過程,節省用戶寫代碼的時間,也不容易錯。

特點-1

可以進行寫入(.Add添加)、讀取、刪去(.Remove)操作,

其中,.Add添加 時,不需要地址,總是自動添加到集合數組中的最後一個位置。

如果是自定義數組,也可以做到,但可能會是這樣子:

Sub test2()

Dim arr()

For i = 1 To 10

ReDim Preserve arr(1 To i) '每次在需要向一維數組中添加新元素時,需要先擴大數組

arr(i) = i '然後再添加新元素

Next

End Sub

讀取集合中元素時,需要指定位置

……這個和普通數組並無差異(只有字典可以直接用關鍵詞key定位置)

方法是: t = s(i)

或者正規一些的寫法是: t = s.Item(i)

……

然後,【比普通數組強】的地方終於出現了!

那就是: 直接刪去/抹去已經不需要的某個特定位置的信息!

方法是Remove:

s.Remove (i)

刪去一維數組中第 i 個信息,同時自動把數組大小縮減

對應的普通數組做法就會比較複雜:

Sub test3()

ReDim arr(1 To 10)

For i = 1 To 10

arr(i) = i

Next

Rmv arr, 3

End Sub

Sub Rmv(arr, j)

For i = j + 1 To UBound(arr)

arr(i - 1) = arr(i)

Next

ReDim Preserve arr(1 To UBound(arr) - 1)

End Sub

呵呵,也許集合方法中也是這麼做的……但畢竟封裝、後臺運行以後,用戶就省心多了。

s.Remove (1)

s.Remove (s.Count)

關於刪除集合中需要元素的方法,

和字典方法比有個缺點。

字典方法有RemoveAll方法可以一下子全部刪去,

而集合中只能一個一個來:

每次刪去第一個的方法,

For i = 1 To s.Count

s.Remove (1)

Next

或者每次刪去最後一個的方法:

For i = 1 To s.Count

s.Remove (s.Count)

Next

顯然第一種方法,每次刪去第一的做法更不容易錯,也更簡單

………………

不過說到最後,一次性刪去全部信息還是有絕招的……

Set s = Nothing

這樣就徹底清空了。呵呵。

還有一個做法就是:

Set s = New Collection

這樣也可以的。

總結:

刪去全部集合元素的方法有三種。

1. 重新初始化集合s

Set s = New Collection

處理結果,s為一個已經初始化了的沒有任何元素的空集合變量

2. 變量s初始化

Set s = Nothing

處理結果,s為一個變量類型為集合對象的空集合變量

其實1和2的執行效果是一樣的,只是過程不一樣。

3. 遍歷集合逐個刪除(每次刪第1個,或刪最後1個)


分享到:


相關文章: