-1

我想计算一个数组的自相关,所以需要访问数组的两个子集(一个有滞后)。这是我的代码:

选项基础 1

Sub test()

Dim intPerNum As Integer
intPerNum = 10
Dim dblMRet() As Double
ReDim dblMRet(intPerNum)
Dim intPerCntr As Integer

Rnd (-2)
For intPerCntr = 1 To intPerNum
    dblMRet(intPerCntr) = WorksheetFunction.NormSInv(Rnd(1))
    Range("TesterTest").Offset(0, intPerCntr) = dblMRet(intPerCntr) 'for debugging
Next intPerCntr

With WorksheetFunction
  Range("Output") = .Covar(.Index(dblMRet,0,1):.Index(dblMRet,0,intPerNum-1),.Index(dblMRet,0,2):.Index(dblMRet,0,intPerNum)) / .Var(dblMRet)
End With

End Sub

我不能使用“:”来访问 VBA 中 dblMret 数组的子集,因此该行不起作用。什么是这样做的好方法呢?我不想在 Excel 工作表上进行此计算,因为我不想输出数组的实际值。谢谢。

4

1 回答 1

0

在这里得到了答案:http: //answers.microsoft.com/en-us/office/forum/office_2010-excel/how-to-access-subset-of-an-array-in-excel-vba/c74765e5-b57e -423f-b9d4-0935ef9674e3?tm=1379435289782

您可以通过在 Index 函数中使用 Evaluate 来完成相同的操作,而不是在 VBA 中使用“:”。工作精美。

如果您需要在 Evaluate 中使用变量,您可以使用 & 连接字符串。

例如,而不是使用:

Range("Output") = WorksheetFunction.Average(WorksheetFunction.Index(MyArray, 1, Evaluate("ROW(1:3)")))

我可以用:

Range("Output") = WorksheetFunction.Average(WorksheetFunction.Index(MyArray, 1, Evaluate("ROW(1:" &(intPerNum-1) &")")))

于 2013-09-18T00:45:32.273 回答