vba动态二维数组_VBA实战技巧05: 动态调整数组以存储所需数据

学习Excel技术,关注微信公众号:

excelperfect

数组是一种常用的数据结构,可用来存储一组相同类型的数据,你可以将一个数组变量视为一个迷你的电子表格,通过引用数组中的位置来存储或者获取数据。

下图1所示的示例是一个名为MyArray的一维数组,包含有6个元素。注意,数组的索引通常从0开始。

bd3db708b4a9c44f46d2a71bd4fdbac3.png

图1

下图2所示的示例是一个名为MyArray的3×4二维数组,包含有12个元素,像不像一个电子表格。注意,其行列的基准值都是从0开始的。

025af85a7f39979b9e3f6abb23319cc2.png

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

0f2328d1e6f01f76dee66411d77e6473.png


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部