vba动态二维数组_VBA实战技巧05: 动态调整数组以存储所需数据
學習Excel技術,關注微信公眾號:
excelperfect
數組是一種常用的數據結構,可用來存儲一組相同類型的數據,你可以將一個數組變量視為一個迷你的電子表格,通過引用數組中的位置來存儲或者獲取數據。
下圖1所示的示例是一個名為MyArray的一維數組,包含有6個元素。注意,數組的索引通常從0開始。
圖1
下圖2所示的示例是一個名為MyArray的3×4二維數組,包含有12個元素,像不像一個電子表格。注意,其行列的基準值都是從0開始的。
圖2
當然,還可以使用三維甚至更高維度的數組,但我們最常使用的是一維數組或二維數組。如果你想詳細學習數組的相關知識,可參閱相關文章:
Excel VBA解讀|進階篇(152):數據結構——談談數組
Excel VBA解讀|進階篇(153):數據結構——基本的數組操作
Excel VBA解讀|進階篇(154):數據結構——數組常用操作示例代碼
Excel VBA解讀|進階篇(155):數據結構——數組相關的函數
VBA進階|數組基礎01:用最淺顯的介紹來幫你認識數組
VBA進階|數組基礎02:簡單的數組操作
……等等系列文章
快速了解數組后,我們來講解在存儲數據時動態調整數組大小的一些方法。
方法1:預先調整數組大小
在數組中存儲數據之前,將數組大小調整為所要存儲的數據數量。這非常適合事先知道需要存儲的數據有多少的情形。
Sub PopulateArray1() Dim MyArray() As Variant Dim rngData As Range Dim rng As Range Dim i As Long '確定要存儲的數據 Set rngData = ActiveSheet.UsedRange '在存儲數據前調整數組大小 ReDim MyArray(rngData.Cells.Count) '遍歷單元格并在數組中存儲數據 For Each rng In rngData.Cells MyArray(i) = rng.Value i = i + 1 Next rngEnd Sub方法2:隨時調整數組大小
VBA在調整數組大小時,會清除掉原先存儲的數據。如果調整數組大小的同時,想要保留之前存儲在數組中的數據,則需要使用Preserve關鍵字,告訴VBA在增加數組存儲容量時,保留原來存儲在數組中的數據。
Sub PopulateArray2() Dim MyArray() As Variant Dim rngData As Range Dim rng As Range Dim i As Long '確定要存儲的數據 Set rngData = ActiveSheet.UsedRange '遍歷單元格區域并在數組中存儲數據 For Each rng In rngData.Cells ReDim Preserve MyArray(i) MyArray(i) = rng.Value i = i + 1 Next rngEnd Sub方法3:從帶有分隔符的字符串中創建數組
分隔符是用于分隔數值的指定字符,例如CSV文件就是由逗號分隔的值組成的文件,我們可以將由分隔符組成的字符串拆分成數組。例如,下面的代碼首先將數值轉換成由“;|;”分隔成的字符串,然后將該字符串轉換成數組。
Sub PopulateArray3() Dim MyArray As Variant Dim myString As String Dim rngData As Range Dim rng As Range '確定要存儲的數據 Set rngData =ActiveSheet.Range("C1:C100") '遍歷單元格區域并以指定的分隔符連接數值 '并將其存儲在字符串中 For Each rng In rngData.Cells myString = myString &";|;" & rng.Value Next rng '移除字符串末尾的分隔符(;|;) myString = Right(myString, Len(myString) - 3) '使用Split函數創建數組 MyArray = Split(myString, ";|;")End Sub如果已經有一個帶分隔符的字符串,那么可以使用代碼很方便地將其拆分成數組:
Sub PopulateArray4() Dim MyArray As Variant Dim myString As String '使用分隔符的字符串 myString = "一年級;|;二年級;|;三年級;|;四年級;|;五年級;|;六年級" '使用Split函數創建數組 MyArray = Split(myString, ";|;")End Sub方法4:直接賦值
可以直接將單元格區域賦值給數組變量來創建數組:
Sub PopulateArray5-1() Dim MyArray() As Variant '創建數組 MyArray =Application.Transpose(Range("A1:A6"))End Sub還可以創建二維數組:
Sub PopulateArray5-2() Dim MyArray() As Variant '創建數組 MyArray = Range("A1:D3")End Sub方法5:從表中提取數據直接創建數組
這個方法在表中的數據變化時,代碼仍正常運行,也就是說,表使數組也具有了自動擴展功能。
Sub PopulateArray6() Dim MyArray() As Variant Dim myTable As ListObject '設置表變量 SetmyTable = ActiveSheet.ListObjects("表1") '創建數組 MyArray =Application.Transpose(myTable.DataBodyRange.Columns(1))End Sub注意,方法4和方法5創建的數組其索引從1開始。
總結
以上是生活随笔為你收集整理的vba动态二维数组_VBA实战技巧05: 动态调整数组以存储所需数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vba 跳到下一个循环_VBA野知识分享
- 下一篇: 使用了未赋值的局部变量_macOS上的汇