VBA学习笔记六(数组)
程序员文章站
2022-07-03 18:24:52
...
引言
让我们先看两个时间对比图,左侧图片为未使用数组,右侧使用数组
代码对比图:
由上面的图可以看出,
1、使用数组之后,程序的运行时间会有大幅度的提升,该功劳应该归于内存的优点,即读写速度快。
2、在for循环里面使用Range语句时,程序会先找表格,然后取里面的值,因此会消耗一些时间。
介绍数组
数组声明
类型 | 代码语句 |
---|---|
静态数组 | Dim arr(1 to 4) |
动态数组 | Dim arr() |
注: 当存入数组的数据类型明确时,可以按照声明变量的方式,将数组声明改为 Dim arr() as String ;当需要对数组进行手动赋值时,需要采用静态数组,采用动态数组时可以将数组想象成一个虚拟的表格,将表格中的数组直接赋值给数组
计算数组的上下界语句
类别 | 代码语句 |
---|---|
上限 | UBound(arr) |
下限 | LBound(arr) |
重定义数组
当声明的数组大小需要计算一下才可以确认时,可以考虑先声明一个动态数组,然后将上述数组进行重定义其大小,参考代码如下:
'先定义个动态的
Dim arr()
j = Range("a65536").End(xlUp).Row - 1
'重定义
ReDim arr(1 To j)
重定义数组时,若需要保留之前数组中已有的数组,采用以下写法
ReDim Preserve arr(1 To j)
实战—查找销售冠军
问题: 根据左侧单价以及销量计算出该产品的销售额,取出其中最高者将其产品名称和销售额写入右侧。
思路: 逐行计算销售额,将其存入数组中,采用VBA自带函数取出最大值即可
代码:
Sub test()
'先定义个动态的
Dim arr()
Dim i, j As Integer
j = Range("a65536").End(xlUp).Row - 1
'重定义
ReDim arr(1 To j)
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)
MsgBox UBound(arr)
MsgBox LBound(arr)
End Sub