Симуляция работает нормально при 10 000 циклов, но получает ошибку 13 (несоответствие типов) при 100 000 циклов - PullRequest
3 голосов
/ 12 февраля 2012

Во-первых, вот мой код:

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 в указанной строке кода.

1 Ответ

6 голосов
/ 12 февраля 2012

Зная, что Application.Tranpose ограничен 65536 строками с вариантами (выдает ту же ошибку), я протестировал ту же проблему с Index

Похоже, что Application.WorksheetFunction.Index также имеетограничение в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...