EP01. “Dynamic Array 动态数组”
🔒 登录后可标记已读- 一般数组建立时要先固定大小,
ReDim关键字能让数组大小随时调整 - 讲怎么用
ReDim建立动态数组,以及数据笔数不确定时怎么先算出实际大小再宣告 - 也讲为什么调整大小时数据会不见(要加
Preserve才能保留) - 前置知识:基本的数组声明和 For 循环
重点内容
适用版本
桌面版通用(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) | 调整大小,原有数据保留 | 数组要一边扩充一边保留已存的数据 |
学完你会
- ✅ 用
Dim numbers()宣告一个还不知道大小的动态数组 - ✅ 用
ReDim在运行时才决定数组实际大小 - ✅ 分辨什么时候要加
Preserve,避免调整大小时数据被意外清空
常见错误
- 用
ReDim调整大小后忘记加Preserve,原本存好的数据全部消失 - 数组大小算错(比如漏算标题行),
size变量跟实际数据笔数对不上 - 循环范围写死,数据笔数变动后忘记同步调整
ReDim的大小
Sources
Blog / Website: