08. maj 2007 - 14:34Der er
14 kommentarer og 1 løsning
En meget lang formel - må kunne laves nemmere
Jeg har et problem med en alt for lang formel, faktisk så lang at Excel ikke kan tage flere tegn. Derfor må den kunne laves nemmere og pænere - bare ikke af mig! :-(
I nedenstående eksempel har jeg forsøgt at skitsere min problemstilling. Kort fortalt har jeg nogle fortløbende ugesierier af data, der skal sammenlignes. Dog kan jeg ikke være sikker på at der data for hver kolonner i hver uge - derfor skal der kun sammenligned hvis der er valid data i samme uge med et års mellemrum.
Ja der bliver for mange HVIS sætninger i formlen så jeg vil foreslå en brugerdefineret Funktion: Indsæt i et alm modul og andvend den i arket sådan:
=mySum(3;26)
hvor 3 representerer kolonne C og 26 kolonne Z 3-26 ændres efter behov
Function mySum(kol1, kol2) Dim x, t Application.Volatile For t = kol1 To kol2 If Cells(55, t) > 0 And Cells(3, t) > 0 Then x = x + (Cells(55, t) / Cells(3, t)) * 100 End If Next mySum = x End Function
----------------------
eller indsæt en formel nederst i hver kolonne: =HVIS(ER.FEJL(C55/C3*100);0;C55/C3*100) og kopier den ud til højre og lav en sum her
Function xSum(kol1, kol2, rk1, rk2) Dim x, t Application.Volatile For t = kol1 To kol2 If Cells(rk2, t) > 0 And Cells(rk1, t) > 0 Then x = x + (Cells(rk2, t) / Cells(rk1, t)) * 100 End If Next xSum = x End Function
i arket skriver du så =xsum(3;26;RÆKKE(3:3);RÆKKE(55:55))
hvor 3 er første kolonne (C) og 26 sidste kolonne (Z) og RÆKKE(3:3) indikerer at der skal summeres fra række 3 og RÆKKE(55:55) indikerer der skal summeres til række 55
jeg gætter på du indsætter formel i AF3 og kopierer ned formel i AF4 skal så beregne kolonnerne i række 4 til 56 og i AF5 række 5 til 57 hvis jeg har forstået dig ret ?
Har fået det til at spille nu min endelige Funktion ser således ud:
Function MyIndeks(kol1, kol2, row) Dim t, indeks, antalCeller Application.Volatile For t = kol1 To kol2 If Cells(row, t) > 0 And Cells(row - 52, t) > 0 Then indeks = indeks + (Cells(row, t) / Cells(row - 52, t)) * 100 antalCeller = antalCeller + 1 End If Next If antalCeller = 0 Then MyIndeks = 0 Else MyIndeks = indeks / antalCeller End If End Function
Indsættes som en arrayformel, dvs indtastning af formlen afsluttes med ctrl-shift-enter istedet for bare enter, således at formlen får tuborgklammer omkring {}
Tager den højde for hvis der er tomme felte i datarækkend for 2007, altså rækken C55? Når jeg indsætter den i mit ark siger den : #VÆRDI! ?? (indsætter den danske)
Bak: Får stadig #VÆRDI! fejlen i mit ark, kan ikke helt se hvad der går galt. Hvis du kan få det til at spille får du selvfølgelig også point. Jeg accepterer excelents svar.
Fair nok :-) Men nu spiller det bare max! Fedt! - kan du kort forklare mig hvad ctrl-shift enter gør?
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.