《VBA经典应用69例》,是我推出的第九套教程,教程是专门针对初级、中级学员在学习VBA过程中可能遇到的案例展开,这套教程案例众多,紧贴“实战”,并做“战术总结”,以便大家能很好的应用。教程的目的是要求大家在实际工作中要利用好VBA。本套教程共三册六十九个专题,今日内容是教程的应用9:读取工作表中不确定数量的数据
大家好,我们这讲开始一个新的应用专题讲解,就是VBA中的ReDim声明语句,这个专题应用的讲解也是结合给学员答疑的频度来讲解的,很多学员都问我ReDim的用法,所以我将努力结合我多年应用经验并结合一些经典的用法展示给大家。
ReDim语句用于在VBA中声明动态数组的大小。以后可以根据需要多次使用它,并重新声明数组的大小。它只能用于动态VBA数组(在原始声明中未声明数组大小),不适用于固定VBA 数组(在原始声明中声明数组大小)。
在动态数组使用过程中,我们可能希望在代码的后期阶段修改数组大小,但保留已在数组中的信息。如果是这样的话,可以使用ReDim Preserve。
Sub mynzC()
'声明字符串数组
Dim strNames() As String
'调整字符串数组的大小,使其能够容纳3个值
ReDim strNames(2) As String
strNames(0) = '小猫'
strNames(1) = '小狗'
strNames(2) = '小鸡'
MsgBox Join(strNames, vbCrLf)
'调整字符串数组的大小,使其能够容纳5个值
ReDim Preserve strNames(4) As String
strNames(3) = '小猴'
strNames(4) = '小马'
MsgBox Join(strNames, vbCrLf)
End Sub
代码截图:
代码的讲解:
1)上述代码中 ReDim Preserve strNames(4) As String 是重新分配数组的大小,但在重新分配的时候是保留原来3个数据的。
我们看代码的运行结果:
上面讲的第三个知识点在实际的工作中是十分有益的,例如下面的工作表:
我们希望读取出A列中所有数值大于10的数据,展示给客户。这个问题的难点在于我们无法在事先知道将要提取的数据个数。这个时候要靠动态数组来帮忙,同时在扩大动态数组大小的时候,不能破坏原数据。
我们看下面的代码:
Sub mynzD()
Dim strNames() As String
'计算列表中的行数
n = Range('A1').End(xlDown).Row
K = 0
For I = 1 To n
UU = Cells(I, 1).Value
If UU > 10 Then
K = K + 1
ReDim Preserve strNames(K)
strNames(K) = UU
End If
Next
MsgBox Join(strNames, ' ')
End Sub
代码截图:
代码的解读:
1)上述代码中利用ReDim Preserve strNames(K)来增加动态数组的分配个数,分配的时候保留原数据。由于增加数组分配个数是在判断了值大于10之后的动作,从而保证了数据的严谨。
最后我们看代码的运行结果:
结论:这个专题中,我们学习了ReDim语句在动态数组中的应用。动态数组是VBA 编码中非常有用的部分,使用ReDim语句为其增加了额外的灵活性。
今日内容回向:
1 如何理解ReDim语句中各个参数的意义?
2 如何保留动态数组的原值?
本讲内容参考程序文件:应用009.xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
【分享成果,随喜正能量】至长反短,至短反长。遍地是黄金,缺少有心人. 叶自根生,相自心生。傲不可长,欲不可纵. 江山易改,本性难移。。
联系客服