MICROSOFT

EP01. “Dynamic Array 动态数组”

首页 Microsoft 工具 Excel · VBA · Array · EP01
约 4 分钟· #EP01#Excel#Array
🔒 登录后可标记已读
  • 一般数组建立时要先固定大小,ReDim 关键字能让数组大小随时调整
  • 讲怎么用 ReDim 建立动态数组,以及数据笔数不确定时怎么先算出实际大小再宣告
  • 也讲为什么调整大小时数据会不见(要加 Preserve 才能保留)
  • 前置知识:基本的数组声明和 For 循环

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。


建立动态数组

  1. 宣告一个还不知道大小的数组:
Dim numbers() As Integer, size As Integer, i As Integer
  1. 先算出实际要用的大小(例如 A 列有几笔数据):
size = WorksheetFunction.CountA(Worksheets(1).Columns(1))
  1. ReDim 把数组调整成这个大小:
ReDim numbers(size)
  1. 用循环把数据逐一塞进数组:
For i = 1 To size
    numbers(i) = Cells(i, 1).Value
Next i
  1. 显示结果:
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:

  1. Dynamic Array