重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
建立动态数组
- 宣告一个还不知道大小的数组:
Dim numbers() As Integer, size As Integer, i As Integer- 先算出实际要用的大小(例如 A 列有几笔数据):
size = WorksheetFunction.CountA(Worksheets(1).Columns(1))- 用
ReDim把数组调整成这个大小:
ReDim numbers(size)- 用循环把数据逐一塞进数组:
For i = 1 To size
numbers(i) = Cells(i, 1).Value
Next i- 显示结果:
MsgBox numbers(size)ReDim 会清空原本的数据
ReDim numbers(3)
MsgBox numbers(1) ' 结果是空的,原本存的数据被清空了加 Preserve 保留原本的数据
ReDim Preserve numbers(3)
MsgBox numbers(1) ' 原本的数据还在📌 关键规则:ReDim 调整数组大小时,会把里面原有的数据全部清空;如果想保留原本的数据,一定要加 Preserve 关键字。
ReDim 怎么选
| 写法 | 效果 | 适合场景 |
|---|---|---|
ReDim numbers(3) | 调整大小,原有数据全部清空 | 数组要重新装一批全新的数据 |
ReDim Preserve numbers(3) | 调整大小,原有数据保留 | 数组要一边扩充一边保留已存的数据 |
学完你会
常见错误
- 用
ReDim调整大小后忘记加Preserve,原本存好的数据全部消失 - 数组大小算错(比如漏算标题行),
size变量跟实际数据笔数对不上 - 循环范围写死,数据笔数变动后忘记同步调整
ReDim的大小
Sources
Blog / Website: