欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

VBA学习笔记六(数组)

程序员文章站 2022-07-03 18:24:52
...

引言

让我们先看两个时间对比图,左侧图片为未使用数组,右侧使用数组
VBA学习笔记六(数组)
代码对比图:
VBA学习笔记六(数组)
由上面的图可以看出,
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学习笔记六(数组)
问题: 根据左侧单价以及销量计算出该产品的销售额,取出其中最高者将其产品名称和销售额写入右侧。
思路: 逐行计算销售额,将其存入数组中,采用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

相关标签: excel