25. november 2003 - 13:04Der er
8 kommentarer og 1 løsning
Flere værdier fra excel - vba
Hejsa!
Er det muligt at trække mere end een værdi ud til regnearket fra samme function i en makro eller bliver man altid nødt til at kopiere funktionen, omdøbe den og skrive ny variable som output nederst?
Hvis du tænker på at lave en funktion der skal returnere en værdi til en celle i Excel, når du bruger funktionen i cellen. SÅ Ja der kan kun returneres en værdi...
"""" Function bineurocall(S As Double, sigma As Double, _ r As Double, Strike As Double, T As Double, _ N As Integer) As Double Dim u As Double, d As Double, q As Double, Rd As Double, dt As Double Dim vec() As Double
dt = T / N Rd = Exp(r * dt)
' the up and down specifications u = Exp(sigma * (dt ^ 0.5)) d = Exp(-sigma * (dt ^ 0.5))
' calculate riskneutral probability q = (Rd - d) / (u - d)
ReDim vec(0 To N) As Double Dim i As Integer, j As Integer ' initialise final payoff For j = 0 To N vec(j) = Application.Max(S * (u ^ j) * (d ^ (N - j)) - Strike, 0) Next j
' roll backwards For i = (N - 1) To 0 Step -1 For j = 0 To i vec(j) = (vec(j + 1) * q + vec(j) * (1 - q)) / Rd Next j Next i
bineurocall = vec(0)
End Function """""
Denne koder returnerer værdien vec(0) til cellen. Men hvis jeg nu også ønsker værdien vec(3) til en anden celle, kan jeg så gøre dette uden at skulle lave en ny funktion?
Nej - en funktion er kendetegnet ved at den returnerer EN værdi i sit navn. Men den kan jo sagtens udregne og skrive alle de værdier til alle de celler du må ønske, fx. med
Jo, det er det muligt at trække flere værdier ud af samme function. Functionen skal bare returnere en variant og indsættes over 4 celler i excel som en arrayformel.
Function bineurocall(S As Double, sigma As Double, _ r As Double, Strike As Double, T As Double, _ N As Integer) As variant Dim u As Double, d As Double, q As Double, Rd As Double, dt As Double Dim vec() As Double
dt = T / N Rd = Exp(r * dt)
' the up and down specifications u = Exp(sigma * (dt ^ 0.5)) d = Exp(-sigma * (dt ^ 0.5))
' calculate riskneutral probability q = (Rd - d) / (u - d)
ReDim vec(0 To N) As Double Dim i As Integer, j As Integer ' initialise final payoff For j = 0 To N vec(j) = Application.Max(S * (u ^ j) * (d ^ (N - j)) - Strike, 0) Next j
' roll backwards For i = (N - 1) To 0 Step -1 For j = 0 To i vec(j) = (vec(j + 1) * q + vec(j) * (1 - q)) / Rd Next j Next i
bineurocall = vec End Function
functionen indsættes nu ved at markere 4 celler, trykke F2, indsætte formlen og afslutte med ctrl-shift-enter
Hvad så hvis jeg kun ønsker værdierne vec(0) og vec(3)?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.