如何调用含一维与多维值的数组?VBA数组取值越界报错求助
问题分析与解决方法
错误原因
- 数组维度误用:用
Transpose转置单列单元格范围后,得到的是一维数组(下标从1到24),但你代码里用了statikk_start(colIndex - 1)(2, rowIndex)这种二维数组的调用方式,直接导致下标越界。 - 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
相关产品推荐
相关产品推荐

