关于EXCELVBA的数组理解.docVIP

  • 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)

1亿VIP精品文档

相关文档