Excel_VBA数组入门教程集合

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Excel VBA数组入门教程集合

1. 前言:不要把VBA数组想的太神秘,它其实就是一组数字而已。

2. 数组的维数:

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个元素

3. 把单元格数据搬入内存:

一、声明:

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

4. 把单元格数据搬入内存:

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

5. 动态数组的声明:

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

6. 动态数组的声明:

arr(-19 to 8) 这个数组的编号就是从-19开始的.那么它的最小编号就是-19,最大编号是8, 如果用语句返回就是:

Sub t1()

Dim arr(-19 To 8)

MsgBox UBound(arr) '返回最大编号,结果为8

MsgBox LBound(arr) '返回最小编号,结果为-19

End Sub

如果是有行列组成的二维数组呢?二维数组返回行的下标和列的下标见下例

Sub t2()

Dim arr(-19 To 8, 2 To 5)

MsgBox UBound(arr) '返回第1维(行的)最大编号,结果为8

MsgBox LBound(arr) '返回第1维(行的)小编号,结果为-19

MsgBox UBound(arr, 2) '返回第2维(列的)最大编号,结果为5

MsgBox LBound(arr, 2) '返回第2维(列的)最小编号,结果为2 End Sub

Sub t3()

Dim arr

arr = Sheets(1).UsedRange 'Usedrange的行数和列数是未知的

MsgBox UBound(arr, 1) '可以计算这个区域有多少行

MsgBox UBound(arr, 2) '可以计算出这个区域有多少列

End Sub

7. 使用Array函数创建常量数组:

使用Array函数创建数组

1维常量数组:Array("A",1,"C")

2维常量数组: Array(Array("a", 10), Array("b", 20), Array("c", 30))

也可以调用excel工作表内存数组:

1维数量: [{"A",1,"C"}]

2维数量: [{"a",10;"b",20;"c",30}]

内存常量数组有什么作用呢?

1、简化赋值

比如:我需要给数组arr分别赋值10 ,20,30,40 ,一般就需要分别赋值,即:

arr(1)=10

arr(2)=20

相关文档
最新文档