EXCEL VBA Array

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
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

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
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:

Kopiuj
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.