跟着王老师学Excel VBA #11 | 使用VBA数组
概要
- 认识VBA数组及常用操作 数组:一组变量 — Dim arr() 值 | 区域
代码
Sub test()
Dim i,k '可不定义变量类型
Dim t
Or
Dim i As Long '注意integer的范围
t = Timer
For i = 2 To 20000
If Range("G" & i) = Range("N5") Then
k = k +Range("J" & i)
End If
Next
Range("P5") = k
MsgBox Timer - t
End Sub
'计算代码运行多久
t = Timer
Timer - t
'如何改为科学计数法
Format(Timer,"0.0000")
'高效运行代码(做大量循环的时候,for循环会拖慢代码运行的速度,因此在for循环中尽量减少变量的range)
Sub test()
Dim i,k '可不定义变量类型
Dim t
Dim str As String
Dim arr() '定义数组
t = Timer
arr = Range("G1:J200000")
str = Range("N5")
For i = 2 To 200000
If arr(i,1) = str Then
k = k +arr(i,4)
End If
Next
Range("P5") = k
MsgBox Timer - t
End Sub
'介绍数组
Dim arr(1 To 4) 'arr有维度,最多20维度;有大小,若自行给数组赋值,需要定义大小,若赋值为区域,可不定大小
arr(1) = "张三"
arr(2) = "李四"
arr(3) = "王五"
Range("B1")=arr(2) '静态数组
Or
Range("A10:D10") = arr '一维数组是横向的;动态数组
Dim arr()
arr=Range("A1:A5") '当把区域定义给数组,数组本身是二维的
Range("c1") = arr(2,1)
'split函数拆分得出的结果是数组
Range("A2") = split(Range("E1"),"-")(0)
'数组的优势
- 数组可以虚拟空间,临时存放一些中间数据
- 数组可直接用在函数里
Dim arr()
Dim i,j As Integer
j=Range("A65536").End(xlUp).Row-1
ReDim arr(1 To j) '重定义数组大小 — 区域可不定大小;ReDim[Preserve]可保留原先数据,仅改变数组大小
For i = 1 To j
arr(i) = Range("B"& i+1) * Range("C"& i+1)
Next
Range("H3") = Application.WorksheetFunction.Max(arr)
Range("H2") =Range("A" & Application.WorksheetFunction.Match(Range("H3"),arr,0)+1) 'match函数,查找某一个值在一列中是第几个
'与数组相关的函数
Ubond(arr) 'up bond 上边界,返回数组的上限
Lbond 'low bond 下边界,数组的下线
遍历数组
For i = Lbond(arr) To Ubond(arr)
'排列组合计算回款问题
Dim i,j,k,l As Integer
For i= 2 To 80
For j= 2 To 80
For k = 2 To 80
For l = 2 To 80
If Range("A"&i)+Rang("A"&j)+Range("A"&k)+Range("A"&l)=124704 Then
Range("F3") = Range("A"&i)
Range("G3") = Range("A"&j)
Range("H3") = Range("A"&k)
Range("I3") = Range("A"&l)
GoTo 100
End If
Next
Next
Next
Next
100
'提升运算速度
Dim i,j,k,l As Integer
Dim arr()
arr=Range("A1:A80")
For i= 2 To 80
For j= 2 To 80
For k = 2 To 80
For l = 2 To 80
If arr(i,1)+arr(j,1)+arr(k,1)+arr(l,1)=124704 Then
Range("F3") = arr(i,1)
Range("G3") = arr(j,1)
Range("H3") = arr(k,1)
Range("I3") = arr(l,1)
GoTo 100
End If
Next
Next
Next
Next
100