Avatar billede masteraaen Novice
25. november 2003 - 13:04 Der 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?

På forhånd tak!
Avatar billede martin_moth Mester
25. november 2003 - 13:15 #1
???
Avatar billede martin_moth Mester
25. november 2003 - 13:16 #2
Prøv at vis din kode, for som alle ved, så "siger kode mere end 1000 ord" ;o)
Avatar billede kedde65 Praktikant
25. november 2003 - 13:24 #3
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...

VH CK
Avatar billede masteraaen Novice
25. november 2003 - 13:27 #4
Ok, her kommer den så:

""""
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?

pft.
Avatar billede martin_moth Mester
25. november 2003 - 13:37 #5
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

    Range("D11").Select
    ActiveCell.FormulaR1C1 = "122"
    Range("C12").Select
    ActiveCell.FormulaR1C1 = "232"
Avatar billede masteraaen Novice
25. november 2003 - 13:48 #6
Gud ja!

Det var en smart måde! Tak for det!
Avatar billede bak Forsker
25. november 2003 - 20:51 #7
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
Avatar billede bak Forsker
25. november 2003 - 21:21 #8
Se evt. et lille eksempel her.
http://tommy.bak.homepage.dk/flereoutput.xls
Avatar billede masteraaen Novice
09. december 2003 - 11:33 #9
Hvad så hvis jeg kun ønsker værdierne vec(0) og vec(3)?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester