vba ReDim 保留“下标超出范围”
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23393123/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
ReDim Preserve "Subscript Out of Range"
提问by atomant
I am trying to move data from 2 Double Arrays to 2 different Double Arrays. I'm not sure what the size is going to be because I am taking a randomized sample out of the first arrays and putting it into the 2nd arrays.
我正在尝试将数据从 2 个双精度数组移动到 2 个不同的双精度数组。我不确定大小会是多少,因为我从第一个数组中随机抽取样本并将其放入第二个数组中。
When I add the ReDim Preserve line I get the Subscript Out of Range error.
当我添加 ReDim Preserve 行时,出现下标超出范围错误。
Function CreateTrainingSet(TrainingPercent As Double, Inputs() As Double, Outputs() As Double)
' Create Randomized Training set data
Dim TrainingInputs() As Double, TrainingOutputs() As Double
Dim i As Integer, j As Integer, count As Integer
'ReDim TrainingInputs(UBound(Inputs, 1), UBound(Inputs, 2))
'ReDim TrainingOutputs(UBound(Outputs, 1), UBound(Outputs, 2))
count = 0
' Move TraningPercent % of data from Inputs and Outputs to TrainingInputs and TrainingOutputs
For i = LBound(Inputs, 1) To UBound(Inputs, 1)
Dim ran As Double
ran = Rnd()
If ran <= TrainingPercent Then
count = count + 1
For j = LBound(Inputs, 2) To UBound(Inputs, 2)
ReDim Preserve TrainingInputs(1 To count, 1 To UBound(Inputs, 2))
TrainingInputs(count, j) = Inputs(i, j)
Next j
For j = LBound(Outputs, 2) To UBound(Outputs, 2)
ReDim Preserve TrainingOutputs(1 To count, 1 To UBound(Outputs, 2))
TrainingOutputs(count, j) = Outputs(i, j)
Next j
End If
Next i
For i = LBound(TrainingInputs, 1) To UBound(TrainingInputs, 1)
For j = LBound(TrainingInputs, 2) To UBound(TrainingInputs, 2)
Cells(i, j + 10).Value = TrainingInputs(i, j)
Next j
Next i
End Function
回答by Carl Onager
To summarise the comments above into an answer:
将上述评论总结为答案:
- You can only redim the last dimension of a multi dimension array
- 您只能重新调整多维数组的最后一个维度
Therefore in order to resize a multiple dimension array there are a couple of simple options:
因此,为了调整多维数组的大小,有几个简单的选项:
- If only one dimension needs to be resized flip the loops and logic around so that the dimension to be resized becomes the last dimension
- If both dimensions must be resized use either an array of arrays or a collection of arrays and correct the loops as required
- 如果只有一个维度需要调整大小,则翻转循环和逻辑,以便要调整大小的维度成为最后一个维度
- 如果必须调整两个维度的大小,请使用数组数组或数组集合并根据需要更正循环