2015-08-10 5 views
0

Я новичок в массивах в VBA, это намного проще в MatLab, но я не могу заставить код работать. Просто, я расчет LN ежедневные возвращения индекса: LN (t0/t1) Вот код:VBA: расчет LN Daily Returns - подстрочный код из диапазона

Dim Index() As Variant 

Dim Ret() As Variant 

    Index = Range("B9:B29") 

    For i = 1 To UBound(Index) - 1 

     Ret(i, 1) = Log(Index(i, 1)/Index(i + 1, 1)) 

    Next i 

Я получаю сообщение об ошибке в Ret (I, 1) петля. Любая помощь будет оценена!

+1

Вы должны «ReDim Ret (от 1 до UBound (Index) - 1, 1 to 1) перед добавлением к нему каких-либо значений. –

+0

Спасибо! Теперь я получаю ошибку переполнения в той же строке [Ret (i, 1) = Log (index ....) – user2977664

ответ

0

Обнаружено, когда ReDim обращается в массив с одним измерением. Поэтому Ret (i, 1) должен быть Ret (1). Интересно, почему Index = Range возвращает 2-мерный массив?

Dim Index() As Variant 
    Dim Ret() As Variant 


    Index = Range("B9:B29") 

    ReDim Ret(1 To UBound(Index) - 1) 


    'Debug.Print Index(1, 1) 


    For i = 1 To UBound(Index) - 1 

     Ret(i) = Log(Index(i, 1)/Index((i + 1), 1)) 

    Next i 
+0

'someRange.Value' всегда возвращает 2D-массив, если' someRange' не является отдельной ячейкой, и в этом случае он просто возвращает значение этой ячейки. –