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开始。

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
