- 17
- 0
- 约 15页
- 2017-03-09 发布于贵州
- 举报
关于EXCELVBA的数组理解
关于EXCEL中VBA的数组理解
?一、什么是VBA数组
VBA数组想的太神秘,它其实就是一组数字而已。把一组数按行、列排在一起,放在内存中。就是一个VBA数组。
二、数组的维数
数组的维数其实和文件管理的目录一样的,只有一层时就是一维。如果有两层则是二维数组(有行有列为二维),如果有三层,则是三维数组。。VBA中支持1~3维数组运算。
Sub Dim x As Long, y As Long
Dim arr 1 To 10, 1 To 3 ? 创建一个可以容下10行3列的数组空间
For x 1 To 4
For y 1 To 3
arr x, y Cells x, y ? 通过循环把单元格区域a1:c4的数据装进数组中
Next y
Next x
?MsgBox arr 4, 3 根据提供的行数和列数显示数组
arr 1, 2 我改一下试试 你可以随时修改数组内指定位置的数据
?MsgBox arr 1, 2
End Sub
总结:二维是由行和列表示的数组,如ARR 3,2 表示数组中第3排第2列的元素。而一维数组只是由一个元素决定,如ARR(4)表示数组中第4个元素
三、把单元格数据搬入内存:
一、声明:
Dim arr as Variant? 声明一个变量,不能声明其他数据类型
Dim arr 1 to 10, 1? to??2? , 这种声明也是错误的,固定大小的VBA数组是不能一次性装入单元格数据
或:dim arr 这种声明方式是声明一个动态数组,也可以装入单元格区域,构成一个VBA数组。
二、装入
arr range a9:c100 ?? 装入很简单,变量 单元格区域
三、读出
装入数组后的单元格数值,可以按 数组名称 行数,列数 直接读取该位置的值,如下面的代码。
Msgbox? arr 3,2 ?? 就可以取出搬过去的而构成的数组第3行第2列的内容
四、示例
?Sub s3
Dim arr 声明一个动态数组(动态指不固定大小)
Dim arr1? 声明一个Variant类型的变量
arr Range a1:c7 ?? 把单元格区域A1:C7的值装入数组arr
arr1 Range a1:c7 ?? 把单元格区域A1:C7的值装入数组arr1?
MsgBox arr 1, 1 ?? 读取arr数组中第1行第1列的数值?
MsgBox arr1 2, 3 ? 读取arr1数组的第2行第3列的数值?
End Sub
四、把内存数据搬入单元格
Sub test
Dim arr 声明一个变量用来盛放单元格数据
Dim x As Integer
arr Range a2:d5 把单元格数据搬入到arr里,它有4列4行?
For x 1 To 4 通过循环在arr数组中循环
arr x, 4 arr x, 3 * arr x, 2 数组的第4列 金额 第3列*第2例?
Next x
Range a2:d5 arr 把数组放回到单元格中
End Sub
Sub test1
Dim arr 1 To 5 声明一维数组
For x 1 To 5
arr x x * 2? 通过循环给每个位置赋值
Next x
Range A1:E1 arr? 把数组导入到excel中的a1:e1单元格中
Range A1:A5 Application.Transpose arr 如果是放在一列中,就需要对数组进行转置后再存放
End Sub
五、动态数组的声明
Sub darr
Dim arr ? 声明一个动态的arr数组 不知道它能盛多少数据
Dim k
k Application.WorksheetFunction.CountIf Range a2:a6 , 10 计算大于10的个数
ReDim arr 1 To k ? 再次声明arr的大小,正好盛下k数量的值
For x 2 To 6
If Cells x, 1 10 Then
m m + 1
arr m Cells x, 1 ? 通过循环把大于10的数字装入数组
End If
Next x
MsgBox arr 2
End Sub
六、数组的上标 lBOUND 和下标 UBOUND
arr -19 to 8 ? -19开始的.那么它的最小编号就是-19,最大编号是8, 如果用语句返回就是:
Sub t1
Dim arr -19 To 8
MsgBox UBound arr 返回最大编号,结果为8
MsgBox LBound arr 返回最小编号,结果为-19
End Sub
如果是有行列组成的二维数组呢?二维数组返回行的下标和
原创力文档

文档评论(0)