Avatar billede hma Praktikant
20. november 2017 - 14:47 Der er 11 kommentarer

Gennemsnit af seneste tre værdier over 0

Hej
Jeg kan ikke selv finde en formel/løsning på at finde Gennemsnittet af de seneste 3 tal større end 0. Øverste række kunne være datoer.
Hvis færre end 3 tal >0, så gennemsnit af disse. (se de sidste 3 rækker)
1.    2.    3.    4.    5.    6.    7.    8.    9.    10.    11.    12.        Resultat
4    0    0    3    6    0    0    6    0    9                7
0    0    0    4    0    0    6    0    0    8                6
3    3    3    3    3    3    3    3    0    3                3
5    8    9    7    7    8    5    9    8    7                8
5    4    3    2    1    1    1    0    1    1                1
0    4    0    5    0    2    0    3    0    1                2
0    0    0    0    0    0    0    0    5    0                5
0    0    0    0    4    0    0    4    0    0                4
0    0    0    0    0    0    0    0    0    0                0
Avatar billede anedi Ekspert
20. november 2017 - 16:10 #1
Denne matrixformel kan vist klare det. Indsæt i M2, Evaluer ved at holde CTRL og SHIFT neden inden du trykker ENTER og træk ned til sidste række.

=SUM(L2:INDEX(A2:L2;LARGE((COLUMN(A2:L2)-MIN(COLUMN(A2:L2))+1)*(A2:L2<>0);MIN(COUNTIF(A2:L2;"<>0");3))))/MIN(COUNTIF(A2:L2;"<>0");3)

Vh
Anedi
Avatar billede hma Praktikant
20. november 2017 - 18:08 #2
I mit danske regneark har jeg oversat til det til
i "Tuborgklammer"
=SUM(L3:INDEX(A3:L3;STØRSTE((KOLONNE(A3:L3)-MIN(KOLONNE(A3:L3))+1)*(A3:L3<>0);MIN(TÆL.HVIS(A3:L3;"<>0");3))))/MIN(TÆL.HVIS(A3:L3;"<>0");3)

Men det giver resultatet "#NAVN?"
Jeg kan sagtens bruge et par kolonner mere. Så kan jeg lave noget der ligner en formel der finder sidste værdi>0, og derefter næstsidste værdi>0. Husk det er en tidsakse jeg har ud af.
Avatar billede xl-Enthusiast Ekspert
20. november 2017 - 19:15 #3
Den del er nem. Du har glemt INDEX som hedder INDEKS på dansk.

Hvad værre er, er at jeg ikke kan få formlen til at give korrekt resultat. Jeg får
7
2,666666667
1
2,333333333
0,333333333
0,333333333
1,666666667
1,333333333

i stedet for det ønskede:

7
6
3
8
1
2
5
4

Måske anedi kan forklare om hun får de ønskede resultater
Avatar billede hma Praktikant
20. november 2017 - 19:33 #4
Tak fordi du var vågen, når jeg nu sover. Med INDEKS istedet for INDEX får jeg nu de rigtige resultater i de første rækker, hvor der er mindst 3 værdier >0.
Til gengæld får jeg forkerte resultater når der er mindre 3 værdier>0.
Avatar billede xl-Enthusiast Ekspert
20. november 2017 - 20:16 #5
Sådan her var tallene i din første opstilling i de første tre rækker
4    0    0    3    6    0    0    6    0    9
0    0    0    4    0    0    6    0    0    8
3    3    3    3    3    3    3    3    0    3

Jeg kan kun få anedis formel til at returnere 7, 2,66667 og 1.
Får du noget andet?
Resultatet skal vel være 7, 6 og 3 - skal det ikke?
Avatar billede hma Praktikant
20. november 2017 - 20:47 #6
Ja tallene er som du skriver i de første 3 rækker. Anedis formel giver hos mig de rigtige resultater, og de er som du skriver 7, 6 og 3.
Min formel ser således ud (i Tuborg klammer)
=SUM(L2:INDEKS(A2:L2;STØRSTE((KOLONNE(A2:L2)-MIN(KOLONNE(A2:L2))+1)*(A2:L2<>0);MIN(TÆL.HVIS(A2:L2;"<>0");3))))/MIN(TÆL.HVIS(A2:L2;"<>0");3)
Avatar billede excelent Ekspert
20. november 2017 - 21:49 #7
Prøv med >0 i stedet for <>0
Avatar billede jens48 Ekspert
20. november 2017 - 22:16 #8
Formelen regner ikke rigtigt, hvis der kun er to eller en celle forskellig fra nul, idet den altid dividerer med 3. Alternativt kan denne makro bruges. Den checker hvor mange tal der er forskellige fra nul, og skriver resultatet i kolonne M

Sub Gennemsnit()
Dim c, r, t, x, LastRow As Integer
LastRow = ActiveSheet.UsedRange.Rows.Count ' tæller antal rækker
Range("M2:M" & LastRow).ClearContents ' sletter gammel data
For r = 2 To LastRow 'Begyndt loop for hver række
t = 0 ' sletter sum
x = 0 ' sletter antal celler
For c = 12 To 1 Step -1 ' begyndt loop fro hver celle (kolonne L til A)
If Cells(r, c) <> 0 Then ' checker om cellen er 0
t = t + 1 ' tæller celler <>0
x = x + Cells(r, c) ' summerer celler
End If
If t = 3 Then GoTo A: 'springer til A: hvis 3 celler talt
Next ' loop slut for celler
A:
Cells(r, 13) = x / t ' skriver gennemsnit i kolonne M
Next 'loop slut for rækker
End Sub
Avatar billede jens48 Ekspert
20. november 2017 - 22:21 #9
Der var en lille fejl i forklaring (selve makroen OK). Linje 6 og 7 skulle være:

t = 0 ' sletter antal celler
x = 0 ' sletter sum
Avatar billede jens48 Ekspert
20. november 2017 - 22:30 #10
#8 og #9 skrevet før jeg så excelents kommentar, som får den til at regne rigtigt
Avatar billede anedi Ekspert
22. november 2017 - 09:37 #11
Hej.

Beklager radiostilheden.
Ja jeg kan godt se, at der var en fejl i den oprindelige formel i og med, at nogle celler er tomme og dermed anderledes end 0.

Jeg håber du fik det til at virke med Excelents tilrettelse eller via Jens' makro.

God dag derude.

Vh
Anedi
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

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