You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA中ReDim语句何时无需使用?

Excel VBA动态数组中ReDim的使用场景

先解释你的示例

你代码里的ReDim arr(1 To 4)之所以多余,是因为Split函数会返回一个已经分配好存储空间的数组。当你用arr = Split(s, ",")把这个返回值赋值给动态数组时,VBA会自动重新分配arr的存储空间,完全覆盖之前ReDim指定的大小,所以那行代码没有实际作用。


需要使用ReDim的场景

  • 手动逐个给动态数组元素赋值时:比如你要自己循环往数组里添加元素,必须先通过ReDim指定数组的初始大小,或者后续用ReDim Preserve来扩容(避免丢失已有数据)。示例:
    Sub test_manual_assign()
        Dim arr() As String
        ' 必须先ReDim才能通过索引赋值
        ReDim arr(1 To 2)
        arr(1) = "Apple"
        arr(2) = "Banana"
        ' 扩容并保留原有数据
        ReDim Preserve arr(1 To 3)
        arr(3) = "Cherry"
    End Sub
    
  • 需要调整数组维度或上下界时:比如把一维数组改成二维,或者修改数组的起始下标(比如从0开始改成从1开始)。
  • 初始化动态数组后直接通过索引访问元素时:如果不先ReDim,会触发「下标越界」错误。

无需使用ReDim的场景

  • 直接用数组赋值语句给动态数组赋值时:包括把其他数组、返回数组的函数结果赋值给动态数组,VBA会自动处理存储空间分配。除了你用到的Split,还有这些例子:
    • 用Array函数初始化:
      Dim arr() As Variant
      arr = Array(1, 2, 3, 4) ' 无需ReDim
      
    • 赋值Range区域的数组:
      Dim arr() As Variant
      arr = Range("A1:C5").Value ' 自动匹配单元格区域的大小
      
    • 用Filter函数返回的数组:
      Dim arr() As String
      arr = Filter(Split("Red,Yellow,Green", ","), "e") ' 无需提前ReDim
      
  • 注意:这和数组类型无关——不管是String、Integer还是Variant类型的动态数组,只要是通过这种直接赋值的方式获取数组内容,都不需要提前用ReDim分配空间。

内容的提问来源于stack exchange,提问作者jgg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:20:36