【EXCEL_VBA_基础知识】11 使用VBA数组

课程来源:王佩丰老师的《王佩丰学VBA视频教程》,如有侵权,请联系删除!

当循环中大量使用需多次计算表达式时,可利用数组简化并提升效率(底层逻辑:只算一次,然后结果暂存,使用时去相应位置取出!

目录

[0. 效率提升示例](#0. 效率提升示例)

[1. 自定义数组](#1. 自定义数组)

[2. 重定义数组(可以动态调整大小的数组)](#2. 重定义数组(可以动态调整大小的数组))

[3. UBound与LBound](#3. UBound与LBound)


0. 效率提升示例

vbnet 复制代码
Sub Sum_If()

Dim i, k As Integer
Dim str As String

Dim arr()

'只计算一次Range
'比每次使用range("g" & i)快
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


End Sub

1. 自定义数组

vbnet 复制代码
'定义一维数组并赋值
Sub test()
Dim arr(1 To 4)

arr(1) = "张三"
arr(2) = "李四"
arr(3) = "王五"
End Sub

'定义二维数组并赋值
Sub test1()
Dim arr(1 To 4, 1 To 2)

arr(1, 1) = "张三"
arr(1, 2) = 30
arr(2, 1) = "李四"
arr(2, 2) = 35
arr(3, 1) = "王五"
arr(3, 2) = 40
End Sub


'将数组中的某个值输出到单元格
Sub test3()
Dim arr(1 To 4)

arr(1) = "张三"
arr(2) = "李四"
arr(3) = "王五"

Range("b2") = arr(2)
End Sub

' 将一维数组中的所有值输出到单元格区域
' 一维数组为行存储(先行后列)
Sub test4()
Dim arr(1 To 4)

arr(1) = "张三"
arr(2) = "李四"
arr(3) = "王五"

Range("a7:d7") = arr
End Sub


'将二维数组中的所有值输出到单元格区域
Sub test5()
Dim arr(1 To 3, 1 To 2)

arr(1, 1) = "张三"
arr(1, 2) = 30
arr(2, 1) = "李四"
arr(2, 2) = 35
arr(3, 1) = "王五"
arr(3, 2) = 40

Range("a15:b17") = arr


'将区域赋值给数组


Sub test6()
Dim arr()

arr = Range("a1:a5")


End Sub

2. 重定义数组( 可以动态调整大小的数组**)**

1. 首先,不指定数组大小

2. 然后使用ReDim语句来定义数组的大小

vbnet 复制代码
Dim arr()
Dim j, i As Integer

j = Range("a65536").End(xlUp).Row - 1 ' 确定行数

ReDim arr(1 To j)

3. UBound与LBound

UBound用于返回数组或集合的指定维度的最大值,即上界。它接受两个参数:数组名(arrayname)和维度(dimension)。如果省略维度参数,则默认返回第一维的上界。

UBound函数与LBound函数一起使用,可以确定数组的大小。

这个函数在处理多维数组时特别有用,可以帮助确定数组的边界,从而在循环或访问数组元素时避免越界错误

vbnet 复制代码
Dim A(1 To 100, 0 To 3, -3 To 4)

' 使用UBound函数可以获取每个维度的上界:

LBound(A, 1) = 1
LBound(A, 2) = 0
LBound(A, 3) = -3
UBound(A, 1) = 100
UBound(A, 2) = 3
UBound(A, 3) = 4
相关推荐
破z晓2 小时前
javascript 导出excel表
开发语言·javascript·excel
Am-Chestnuts6 小时前
豆包多轮回答中的表格导出 Excel:编号、日期与长数字检查
excel
hPw0eKIqD19 小时前
使用二次封装的Excel COM 组件操作Excel\WPS ET中的区域、行和列
excel·wps
冰心孤城1 天前
Excel: xls与xlsx格式转换排坑指南
java·前端·excel
金豆呀1 天前
WPS批量提取Word文档内容生成固定格式Excel表格
word·excel·wps
Access开发易登软件1 天前
Access 怎么做前后端分离?用 Web API 读写 SQL Server
前端·数据库·人工智能·microsoft·excel·access
红莲凪是2 天前
使用二次封装的Excel COM 组件操作Excel\WPS ET IExcelRange 高级应用
python·excel·wps
用户298698530142 天前
如何使用免费工具在线将 Excel 转换为 XML 格式
人工智能·后端·excel
开开心心就好2 天前
内存清理工具定时自动清理开机自启动
java·开发语言·elasticsearch·ocr·excel·音视频·big data
开开心心就好2 天前
电脑内存优化工具一键释放内存超简单
java·开发语言·macos·arcgis·ocr·excel·音视频