16. november 2007 - 13:43Der er
8 kommentarer og 1 løsning
Problemer med Excel Functions
Ved af VBA har jeg lavet et to dimentionelt array med værdier. Jeg vil gerne bruge div. "rækker" og "søjler" fra arrayet til input i en Excel function.
Det skulle gerne give det samme resultat som: answer = application.worksheetfunction.correl(range("A1:A10"),range("B1:B10"))
Da jeg laver en del beregninger på det indlæste range, ville jeg foretrække ikke at paste det tilbage i arket, for at lave beregningerne! Det tager simpelthen for meget tid.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Mig bekendt kan man ikke inlæse den ene dimension af en array i en variabel i et hug, den skal indlæses via en løkke som i eks. herunder. Hvad der så er hurtigst i et konkret eks. må bero på hvor mange elementer der skal indlæses via løkken. At læse fra et range til en array er ikke den store tidsrøver hvorimod at skrive tager en del tid.
M.h.t din kodelinie ! virker den rent faktisk eller ? :-) må indrømme jeg har lidt svært ved at gennemskue den.
Sub Korrelation2()
Dim Vektor1 As Variant Dim var1(100) Dim var2(100)
Vektor1 = Sheets("Ark1").Range("A1:B10")
For t = 2 To 6 var1(t) = Vektor1(t, 1) var2(t) = Vektor1(t, 2) Next
Jeg ville virkeligt gerne lige paste hele den (ja meget overraskende) velfungerende kode ind - men den er virkelig skør (det skal måske tilføjes, at jeg ikke selv har skrevet den).
Men det er ikke helt tilfældet - dog er tilfældet, at jeg skal rette den, da den laver korrelation på kursen og ikke afkastet. (underordnet her).
Derfor indlæser jeg kurserne i et stort array (kurser for op til 18 aktiver) beregner afkastene, og derefter skal så korrelationerne beregnes. Her er pænt mange, og det skal være op til brugeren, om det skal være 1 dag, 1 uge, 1 måned tilbage osv. Sidst skal det grafiske output også generes hvor vi kigger på udviklingen i korrelationerne over tid.
Det meste er det er faktisk lige til, når først man har fået lavet den fleksabilitet man ønsker i arket, og da koden rent faktisk pt kører, så er det kun et spørgsmål om at gøre den lidt hurtigere (da den står og "summer" længe, når mange aktiver er valgt).
Der er mange grafer, matricer og en MASSE output der skal genereres og skrives. Derfor søger jeg en metode der kan optimere min kode i hastighed - men jeg tror pt, at jeg vil vælge at skrive ud i arket, beregne videre og slette det efterfølgende :)
temp = 0 For i = 1 To Sheets("Ark1").Range("A1:C10").Columns.Count - 1 For j = i + 1 To Sheets("Ark1").Range("A1:C10").Columns.Count For t = 1 To UBound(TempAfkastArray) var1(t) = TempAfkastArray(t, i) var2(t) = TempAfkastArray(t, j) Next t temp = temp + 1 TempResultarray(temp) = Application.WorksheetFunction.Correl(var1, var2) MsgBox TempResultarray(temp) Next j Next i
temp = 0 For i = 1 To nc - 1 For j = i + 1 To nc For t = 1 To nr var1(t) = TempAfkastArray(t, i) var2(t) = TempAfkastArray(t, j) Next t temp = temp + 1 TempResultarray(temp) = Application.WorksheetFunction.Correl(var1, var2) 'MsgBox TempResultarray(temp) Next j Next i
End Sub
Function Antal_Kovariater(nc As Integer)
Antal_Kovariater = 0 For i = 1 To nc temp = temp + (nc - i) Next i
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.