EXCEL VBA Array

0

Witam,
Jestem bardzo świeży w programowaniu i utknąłem na pewnym problemie a mianowicie mam napisane dwie funkcje do wyliczania greckich wskaźników dla opcji. Chciałbym aby wyniki z tych funkcji pojawiały się w dwóch komórkach po wybraniu ctrl shift enter. Wiem, że służy do tego Array, ale mimo prób nie udaje mi się tego zrobić. Czy ktoś mógłby mi pomóc?

Function BSDelta(Spot As Double, Strike As Double, Maturity As Double, Vol As Double, Rf As Double, Dividend As Double) As Double
Dim D1 As Double
D1 = (Application.WorksheetFunction.Ln(Spot / Strike) + (Rf - Dividend + 0.5 * Vol * Vol) * Maturity) / (Vol * sqr(Maturity))
BSDelta = Application.WorksheetFunction.NormSDist(D1) * Exp(-Dividend * Maturity)
End Function

Function BSVega(Spot As Double, Strike As Double, Maturity As Double, Vol As Double, Rf As Double, Dividend As Double) As Double
Dim D1 As Double
D1 = (Application.WorksheetFunction.Ln(Spot / Strike) + (Rf - Dividend + 0.5 * Vol * vol) * Maturity) / (Vol * sqr(Maturity))
BSVega = Spot * Exp(-Dividend * Maturity) * Sqr(Maturity) * Exp(-(D1 2) / 2) / (2 * Application.WorksheetFunction.Pi()) 0.5
End Function

0

Nie chce mi się wnikać w twoje funkcje, ale jako tablicowe, to są źle napisane. Dam ci przykład prostej funkcji tablicowej. Działającej:

Public Function tablicowa(ByVal ilosc As Long) As Variant
ReDim tablica(ilosc) As Long
Dim i&
For i = 1 To ilosc
    tablica(i) = i * i
Next
tablicowa = Application.Transpose(tablica)
End Function

Wymagania:

  1. MUSI zwracać VARIANT
  2. przed zwrotką trzeba ją transponować, a Transpose zwraca właśnie Varianta

1 użytkowników online, w tym zalogowanych: 0, gości: 1