04. september 2003 - 10:40Der er
6 kommentarer og 1 løsning
Optimering af brugerdefineret funktion
Har lavet en funktion i stil med lopslag, har dog problmer med performance, idet den er lang tid om at beregne når der er mange formler der benytter den.
Har prøvet at sætte enableevents, calculation og screenupdate til false, men det hjælper ikke rigtig noget.
Nogen der har et godt bud?? - eller evt. retningslinier når man opbygger egne formler....
Public Function YTD(intPeriod As Integer, strAccount As String, rngArea As Range)
Dim rngLookuparea As Range Set rngLookuparea = rngArea
For Each cell In rngLookuparea If cell = strAccount Then YTD = 0 For t = 1 To intPeriod YTD = YTD + cell.Offset(0, t + 11) Next YTD = CDbl(YTD) Exit Function Else YTD = "#N/A" End If Next
Public Function YTD(intPeriod As Integer, strAccount As String, rngArea As Range) Dim t As Long Dim rng As Range Application.Volatile On Error GoTo fejl t = Application.WorksheetFunction.Match(strAccount, rngArea, 0) + 1 If Not IsError(t) Then Set rng = Range(rngArea(t, 12).Address & ":" & rngArea(t, intPeriod + 11).Address) YTD = Application.WorksheetFunction.Sum(rng) Exit Function End If fejl: YTD = "#N/A" End Function
Application.Volatile gør at funktionen beregnes hver gang excel laver en beregning. det er nok unødvendigt i dette tilfælde.
lige en kommentar til din egen funktion: Det er rigtigt at excels indbyggede funktioner for det meste er meget hurtigere end hjemmelavede, da de er skrevet i C og optimeret til det yderste, men de kræver dog også lidt performance :-) I din funktion laver du lige så mange vlookups, som du har perioder. Jeg har forsøgt at begrænse mig således at min funktion kun bruger 2 indbyggede funktioner ( 1 match og 1 sum )
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.