大家好,我们今日继续VBA数组与字典解决方案,今日讲解VBA数组的声明,一些朋友会问了:数组都讲了这么长时间了,怎么才讲声明啊?是的,有些知识不到一定的程度即使讲了,大家也不能深入的理解,只有到了一定的程度,再次讲解,大家才能有真正的收获。
一 我们先看看下面的声明方法
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数量的值。
二 把单元格数据填入数组和数组数据的回填
我们利用数组就是为了计算,下面我们看看把工作表中的数据填入数组,及计算后数组数据回填给工作表单元格的方法,看我给出的代码:
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 上述实例如果再次运行一下会有什么结果呢?
联系客服