仿真在10k周期内运行良好,但在100k周期内得到错误13(types不匹配)

首先,我的代码如下:

Sub SimulatePortfolio() Dim lambda As Double Dim num As Integer Dim cycles As Long Column = 12 q = 1.5 lambda = 0.05 cycles = 100000 Dim data(1 To 100000, 1 To 10) As Integer Dim values(1 To 10) As Double For i = 1 To 10 values(i) = 0 Next i temp = lambda For i = 1 To cycles lambda = temp num = 10 t = 0 Dim temps(1 To 10) As Integer For k = 1 To 10 temps(k) = 1000 Next k Do While (t < 10 And num > 0) t = t + tsim(lambda, num) For j = 1 To 10 If (j > t) Then temps(j) = temps(j) - 50 End If Next j num = num - 1 If (num <= 0) Then Exit Do End If lambda = lambda * q Loop For l = 1 To 10 values(l) = values(l) + temps(l) data(i, l) = temps(l) Next l Next i For i = 1 To 10 Cells(i + 1, Column) = values(i) / cycles 'Problem occurs on this line: Cells(i + 1, Column + 1).Value = Application.WorksheetFunction.Var(Application.WorksheetFunction.Index(data, i, 0)) Next i End Sub Function tsim(lambda As Double, num As Integer) As Double Dim v As Double Dim min As Double Randomize min = (-1 / lambda) * Log(Rnd) For i = 1 To (num - 1) Randomize v = (-1 / lambda) * Log(Rnd) If (min > v) Then min = v End If Next i tsim = min End Function 

当我把循环的值设置为10000时,运行正常。 当我进入100000个周期时,在指定的代码行中出现错误13。

意识到Application.Tranpose被限制在65536行的变体(抛出相同的错误)我testing了与Index相同的问题

看来Application.WorksheetFunction.Index在使用variables时也有65536行的限制 – 但是标准范围是好的

因此,您需要将data转储到某个范围,然后使用Index处理范围,或者使用两个数组

 Sub Test() Dim Y Dim Z 'works in xl07/10 Debug.Print Application.WorksheetFunction.Index(Range("A1:A100000"), 1, 1) Y = Range("A1:A65536") `works Debug.Print Application.WorksheetFunction.Index(Y, 1, 1) 'fails in xl07/10 Z = Range("A1:A65537") Debug.Print Application.WorksheetFunction.Index(Z, 1, 1) End Sub