excelperfect 數(shù)組是一種常用的數(shù)據(jù)結(jié)構(gòu),,可用來存儲(chǔ)一組相同類型的數(shù)據(jù),你可以將一個(gè)數(shù)組變量視為一個(gè)迷你的電子表格,,通過引用數(shù)組中的位置來存儲(chǔ)或者獲取數(shù)據(jù)。 下圖1所示的示例是一個(gè)名為MyArray的一維數(shù)組,,包含有6個(gè)元素,。注意,數(shù)組的索引通常從0開始,。 圖1 下圖2所示的示例是一個(gè)名為MyArray的3×4二維數(shù)組,,包含有12個(gè)元素,,像不像一個(gè)電子表格。注意,,其行列的基準(zhǔn)值都是從0開始的,。 圖2 當(dāng)然,還可以使用三維甚至更高維度的數(shù)組,,但我們最常使用的是一維數(shù)組或二維數(shù)組,。如果你想詳細(xì)學(xué)習(xí)數(shù)組的相關(guān)知識(shí),可參閱相關(guān)文章: Excel VBA解讀|進(jìn)階篇(152):數(shù)據(jù)結(jié)構(gòu)——談?wù)剶?shù)組 Excel VBA解讀|進(jìn)階篇(153):數(shù)據(jù)結(jié)構(gòu)——基本的數(shù)組操作 Excel VBA解讀|進(jìn)階篇(154):數(shù)據(jù)結(jié)構(gòu)——數(shù)組常用操作示例代碼 Excel VBA解讀|進(jìn)階篇(155):數(shù)據(jù)結(jié)構(gòu)——數(shù)組相關(guān)的函數(shù) VBA進(jìn)階|數(shù)組基礎(chǔ)01:用最淺顯的介紹來幫你認(rèn)識(shí)數(shù)組 VBA進(jìn)階|數(shù)組基礎(chǔ)02:簡(jiǎn)單的數(shù)組操作 ……等等系列文章 快速了解數(shù)組后,,我們來講解在存儲(chǔ)數(shù)據(jù)時(shí)動(dòng)態(tài)調(diào)整數(shù)組大小的一些方法,。 方法1:預(yù)先調(diào)整數(shù)組大小 在數(shù)組中存儲(chǔ)數(shù)據(jù)之前,將數(shù)組大小調(diào)整為所要存儲(chǔ)的數(shù)據(jù)數(shù)量,。這非常適合事先知道需要存儲(chǔ)的數(shù)據(jù)有多少的情形,。 Sub PopulateArray1() Dim MyArray() As Variant Dim rngData As Range Dim rng As Range Dim i As Long '確定要存儲(chǔ)的數(shù)據(jù) Set rngData = ActiveSheet.UsedRange '在存儲(chǔ)數(shù)據(jù)前調(diào)整數(shù)組大小 ReDim MyArray(rngData.Cells.Count) '遍歷單元格并在數(shù)組中存儲(chǔ)數(shù)據(jù) For Each rng In rngData.Cells MyArray(i) = rng.Value i = i + 1 Next rng End Sub 方法2:隨時(shí)調(diào)整數(shù)組大小 VBA在調(diào)整數(shù)組大小時(shí),,會(huì)清除掉原先存儲(chǔ)的數(shù)據(jù),。如果調(diào)整數(shù)組大小的同時(shí),想要保留之前存儲(chǔ)在數(shù)組中的數(shù)據(jù),,則需要使用Preserve關(guān)鍵字,,告訴VBA在增加數(shù)組存儲(chǔ)容量時(shí),保留原來存儲(chǔ)在數(shù)組中的數(shù)據(jù),。
方法3:從帶有分隔符的字符串中創(chuàng)建數(shù)組 分隔符是用于分隔數(shù)值的指定字符,,例如CSV文件就是由逗號(hào)分隔的值組成的文件,我們可以將由分隔符組成的字符串拆分成數(shù)組,。例如,,下面的代碼首先將數(shù)值轉(zhuǎn)換成由“;|;”分隔成的字符串,然后將該字符串轉(zhuǎn)換成數(shù)組,。 Sub PopulateArray3() Dim MyArray As Variant Dim myString As String Dim rngData As Range Dim rng As Range '確定要存儲(chǔ)的數(shù)據(jù) Set rngData =ActiveSheet.Range('C1:C100') '遍歷單元格區(qū)域并以指定的分隔符連接數(shù)值 '并將其存儲(chǔ)在字符串中 For Each rng In rngData.Cells myString = myString &';|;' & rng.Value Next rng '移除字符串末尾的分隔符(;|;) myString = Right(myString, Len(myString) - 3) '使用Split函數(shù)創(chuàng)建數(shù)組 MyArray = Split(myString, ';|;') End Sub 如果已經(jīng)有一個(gè)帶分隔符的字符串,,那么可以使用代碼很方便地將其拆分成數(shù)組:
方法4:直接賦值 可以直接將單元格區(qū)域賦值給數(shù)組變量來創(chuàng)建數(shù)組: Sub PopulateArray5-1() Dim MyArray() As Variant '創(chuàng)建數(shù)組 MyArray =Application.Transpose(Range('A1:A6')) End Sub 還可以創(chuàng)建二維數(shù)組:
方法5:從表中提取數(shù)據(jù)直接創(chuàng)建數(shù)組 這個(gè)方法在表中的數(shù)據(jù)變化時(shí),代碼仍正常運(yùn)行,,也就是說,,表使數(shù)組也具有了自動(dòng)擴(kuò)展功能。 Sub PopulateArray6() Dim MyArray() As Variant Dim myTable As ListObject '設(shè)置表變量 SetmyTable = ActiveSheet.ListObjects('表1') '創(chuàng)建數(shù)組 MyArray =Application.Transpose(myTable.DataBodyRange.Columns(1)) End Sub 注意,,方法4和方法5創(chuàng)建的數(shù)組其索引從1開始,。 |
|