一、 一维数组
1. 一维数组的定义
一维数组中的元素呈直线状排列, 每个下标对应一个元素。
数组在使用前必须先行定义, 语法格式是:
Dim<数组名>([<下界>]To上界)As数据类型
若省略下标下界, 则数组的最小下标为0。
例如: Dim A(10)As Double
A数组共有11个元素 (下标的起止范围是0~10)。
2. 说明
(1) 定义数组时, 下标的下界值和上界值必须是常量或符号常量, 不能使用变量。
Dimx(n)
或:
n=Inputbox("输入n")
Dimx(n)As Single
均是错误的声明。
(2) 引用数组元素时, 下标不得超出所定义的下界和上界, 否则程序的执行将被中断,同时系统报错。
(3) 使用数组时, 用LBound() 和UBound() 函数可得到该数组下标的下界和上界值。
二、 案例十六的操作步骤
例26: 案例十六的程序代码如下。 其结果如图9.13所示。
Subsub26()
Dim D(10)As Integer,i As Integer
Dimdata(500)As Integer,Sum_350 As Integer
Dim up_avg As Integer,Sum_grade As Long
Dim num As Integer
Fori=1To500
data(i)=300+Rnd∗100
Nexti
For=1To500
Sum_grade=Sum_grade+data(i)
Ifdata(i)>350Then
Sum_350=Sum_350+1
End If
Nexti
avg_grade=Sum_grade/500
Fori=1To500
Ifdata(i)>avg_grade Then
up_avg=up_avg+1
End If
Grade=(data(i)-300)/10
D(Grade)=D(Grade)+1
Nexti
Msg Box("大于350分的考生人数"&Sum_350&" "&"500考生平均分="&avg_grade)
Msg Box("大于平均分的考生人数为"&up_avg)
Debug.Print""
Fori=0To9
Debug.Print("分数段3"&i&"0--"&"3"&i&"9考生人数为:"&" "&D(i)) num=num+D(i)
Nexti
Debug.Print("分数段400分的考生人数为:"&" "&500-num)
End Sub
三、 动态数组
动态数组指在声明数组时给出数组的大小需要改变时, 可用Re Dim语句重新指出数组大小。
1. 语法格式
Re Dim数组名(下标[,下标2...])[As类型]
例如:
Private Sub S1()
Dimx()As Single
...
n=Inputbox("输入n")
Re Dimx(n)
...
End Sub
2. 说明
(1) 动态数组在运行时分配存储单元, 过程中可多次使用Re Dim来改变数组元素的个数。
(2) Re Dim中的下标可以是常量, 也可以是有了确定值的变量, 即:
n=Input Box("输入n的值")
Re Dim Arr(n)
四、 二维数组
二维数组中数据排列成矩阵, 保存在一个二维表中。
1. 语法格式
Dim<数组名>(下标1,下标2)As数据类型
或
Dim<数组名>([<下界>To]上界,[<下界>To]上界)As数据类型
例如: Dim A(3,4)As Integer,声明的A数组有4´5=20个元素。
二维数组的操作通常需要与双重循环相结合。
2. 数组说明
(1) 下标1指定行, 下标2指定列, 若省略定义下标值, 则下标值默认为0;
(2) 二维数组在内存的存放顺序是 “先行后列”, 若定义a(2,3), 则存放顺序是:
a(0,0)→a(0,1)→a(0,2)→a(0,3)
a(1,0)→a(1,1)→a(1,2)→a(1,3)
a(2,0)→a(2,1)→a(2,2)→a(2,3)
例如: Diml Array(0To3,0To4)As Long
等价于
Diml Array(4,5)As Long
3. 数组参数的传递方法
数组参数的传递只能使用按地址传递的方式, 在被调用过程中, 用LBound() 函数和UBound() 函数可测出形参数组的下标下界与下标上界。
例27: Array_Sum过程产生一个100以内随机数组, 要求调用Add函数求数组的和, 输出随机数组个数和数组内数据总和。
编写的过程代码及运行结果如图9.42所示。
图9.42 数组求和结果
Function Add(Rnd_Array()As Integer,N As Integer)As Integer
Dimi As Integer,s As Integer
Fori=1 To N
s=s+Rnd_Array(i)
Nexti
Add=s
End Function
Sub Array_sum()
Dim NAs Integer,i As Integer
Dima(100)As Integer,Sum As Integer
N=Rnd∗100
Fori=1To N
a(i)=Rnd∗100
Nexti
Sum=Add(a(),N)
Msg Box("Sum="&Sum&" "&"N="&N) End Sub
五、 案例十七的操作步骤
例28: 编写过程代码生成下列8×8矩阵。
编写的过程代码如下, 其运行结果见案例十七图9.14所示。
Sub matrix()
Dim a (8,8) As Integer
Dimk As Integer
k=2
Fori=0To7
Forj=0To7
Ifj <=i Then
a(i,j)=1
Else
a(i,j)=k
k=k+1
End If
Nextj
Nexti
Fori=0To7
Forj=0To7
Ifa(i,j)<10Then
Debug.Print" "&a(i,j) '一位数多空1位
Else
Debug.Print" "&a(i,j)
End If
If j=7 Then
Debug.Print""
End If
Nextj
Nexti
End Sub
• 一个过程就是一组完成所需操作VBA代码的命令集合;
• VBA的过程主要包括 “Sub过程” 和 “Function过程” 两种;
• Sub过程不能返回值, Function过程可以返回值。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。