数组与字典解决方案第三十一讲:VBA数组声明及赋值后的回填方法
《VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。
这套字典教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:数组与字典解决方案第三十一讲:VBA数组声明及赋值后的回填方法
【分享成果,随喜正能量】326人性让你问菩萨:我还能再多要点什么。佛性让你问自己:我还能为人性做点什么。一个人只要充满信心,就会对自己的前途充满希望、对自己的生活充满热爱、对自己所从事的每一份工作兢兢业业地去做。
第三十一讲 VBA数组声明及赋值后的回填方法
大家好,我们今日继续VBA数组与字典解决方案,今日讲解VBA数组的声明,一些朋友会问了:数组都讲了这么长时间了,怎么才讲声明啊?是的,有些知识不到一定的程度即使讲了,大家也不能深入的理解,只有到了一定的程度,再次讲解,大家才能有真正的收获。
1 数组的声明方法
1) Dim arr as Variant
2) Dim arr(1 to 10, 1 to 2 )
3) Dim arr()
4) ReDim arr(1 To k)
我们分析一下各种声明方法:
第一种:声明通常用于单元格直接装入数组如:arr =range("a9:c100")
这种装入非常简单,直接用变量 = 单元格区域即可。但是这里要注意的是对于这种写入时数组的声明只能是: Dim arr as Variant
这时,声明是一个变体变量,不能声明其他数据类型。
第二种:通常用于一个固定数组的声明,同时给出了数组的上下界。这种声明要注意的是不能一次性的装入单元格的数据,要靠循环。
第三种,是一个动态数组的声明,也就是说,我们在命名数组时还不知道数组的大小,要靠后期的再次定义。
第四种 是再次声明arr的大小,以正好盛下k数量的值。
2 把单元格数据填入数组和数组数据的回填
我们利用数组就是为了计算,下面我们看看把工作表中的数据填入数组,及计算后数组数据回填给工作表单元格的方法,看我给出的代码:
Sub MyNZsz_31() '第31讲 数组的声明及赋值的回填
Dim arr As Variant '注意此处的Variant
Dim brr() '注意此处定义了一个动态数组
Sheets("31").Select
arr = Sheets("31").UsedRange 'Usedrange的行数和列数是未知的
MsgBox UBound(arr, 1) '可以计算这个区域有多少行
MsgBox UBound(arr, 2) '可以计算出这个区域有多少列
ReDim brr(1 To UBound(arr, 1), 1 To UBound(arr, 2))
For x = 1 To UBound(arr, 1) '通过循环在arr数组中循环
For y = 1 To UBound(arr, 2)
brr(x, y) = arr(x, y) * arr(x, y) '数组自身相乘
Next
Next
'把数组放回到单元格中
Range("A" & Range("A1").End(xlDown).Row + 2).Resize(UBound(arr, 1), UBound(arr, 2)) = brr
End Sub
代码截图:

代码的讲解:此代码在代码部分我都做了详细的注释,不再一一讲解了,仅看看下面的这句代码:
Range("A" & Range("A1").End(xlDown).Row + 2).Resize(UBound(arr, 1), UBound(arr, 2)) = brr
这句设定了数组回填的区域大小,注意这个区域必须和数组的大小要一致,不然会产生错误。所以我利用了Resize(UBound(arr, 1), UBound(arr, 2))来保证这一点。
下面我们看代码的运行:
运行前:

运行,先提示行数:

再提示列数:

最后看结果:

今日内容回向:
1 如何给数组声明?
2 上述实例如果再次运行一下会有什么结果呢?如何避免呢?
我多年的VBA实践经验,全部浓缩在以下教程中:


