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

如何调用含一维与多维值的数组?VBA数组取值越界报错求助

问题分析与解决方法

错误原因

  1. 数组维度误用:用Transpose转置单列单元格范围后,得到的是一维数组(下标从1到24),但你代码里用了statikk_start(colIndex - 1)(2, rowIndex)这种二维数组的调用方式,直接导致下标越界。
  2. Rs存储逻辑错误:原来的Rs(colIndex)是单个变量,每次循环会覆盖之前的计算值,没法保存24个遍历结果。

修改后的代码

Dim p As Range
Set p = Sheets("Kjøreplan").Range("B4:K27")

Dim p_max As Range
Set p_max = Sheets("Kjøreplan").Range("S36:Y36")

Dim statikk_start As Variant
statikk_start = Array(6, 10, 12, 12, 12, 6, 6)

' 替换指定索引的元素为转置后的一维数组
statikk_start(2) = Application.WorksheetFunction.Transpose(Sheets("Kjøreplan").Range("E4:E27").Value)
statikk_start(3) = Application.WorksheetFunction.Transpose(Sheets("Kjøreplan").Range("G4:G27").Value)
statikk_start(4) = Application.WorksheetFunction.Transpose(Sheets("Kjøreplan").Range("I4:I27").Value)

' 定义Rs为二维数组,存储7列×24行的结果
Dim Rs(1 To 7, 1 To 24) As Variant

For colIndex = 1 To 7
    Select Case colIndex
        ' 处理单个整数的情况,为每行填充相同的计算值
        Case 1, 2, 6, 7
            Dim fixedVal As Double
            fixedVal = 2 * p_max(1, colIndex) / statikk_start(colIndex - 1)
            For rowIndex = 1 To 24
                Rs(colIndex, rowIndex) = fixedVal
            Next rowIndex
        ' 处理数组元素的情况,遍历每个值计算
        Case 3, 4, 5
            For rowIndex = 1 To 24
                ' 直接调用一维数组的下标即可
                Rs(colIndex, rowIndex) = 2 * p_max(1, colIndex) / statikk_start(colIndex - 1)(rowIndex)
            Next rowIndex
    End Select
Next colIndex

关键修改点

  • 去掉冗余的For i循环,直接赋值statikk_start的指定元素,代码更简洁。
  • 将Rs改为二维数组,可以完整保存每列24行的计算结果,避免值被覆盖。
  • 修正数组调用方式:对转置后的一维数组,直接用statikk_start(colIndex - 1)(rowIndex)获取对应位置的值,解决下标越界问题。
  • 对单个整数的情况,循环填充每行的结果,保证Rs数组结构统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:15:18