PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerExcelExcelFormel för att ange resultat för fem senaste veckorna när dessa föregås av nollvärdenFormel för att ange resultat för fem senaste veckorna när dessa föregås av nollvärden
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2017-10-23 20:47
 

 Hej,

 

Jag undrar om det är någon som kan hjälpa mig med att lösa nedanstående problem med att skapa en formel som returnerar sökt värde men helst utan behov av att skapa en hjälprad? Är det möjligt?

 

Jag har kört fast med en matris för tidredovisning som ska kunna visa genomsnittet för de fem senast redovisade veckorna. Raderna i kolumn A representerar olika projekt. I kolumn B autosummeras antalet lagda timmar på respektive projekt som redovisas vecka för vecka i kolumnerna D-BC. I kolumn C vill jag skapa en formel som returnerar genomsnittet för de fem senast redovisade veckorna, och det är här jag får problem. Låt oss säga att senast ifyllda cell representerar vecka 7, alltså kolumn J. Då ska summan som returneras i kolumn C vara summan av värdena för vecka 3 till 7, eller kolumn F-J, dividerat med 5. Jag lyckas inte få till en formel som räknar ut vilken som är den senast ifyllda veckan när en tidigare kolumn på samma rad innehåller celler (veckor) som inte är ifyllda. För att hitta den senast ifyllda veckan (i kolumn J i det här fallet) har jag testat formeln =INDEX(D2:BC2;COUNTA(D2:BC2)) men om cellen som representerar vecka 1 eller vecka 2 inte är ifylld kommer Excel att returnera värdet i den cell som representerar vecka 6 istället för vecka 7.

 

Vet någon hur jag kan skapa en formel som anger rätt värde även när det finns veckor (celle) som inte är ifyllda?

 

Hälsningar,

Kalle

Nytt inlägg
 2017-10-24 09:57
Accepterat svar 
 Ändrad av anonymous  på 2017-10-24 09:00:23

Din formel räknar väl bara antalet ifyllda och sen går den så många steg åt höger?

En variant är att istället returnera det högsta kolumnnumret, bland de celler som inte är tomma (<>"")

dvs det högsta värdet av: (D2:BC2<>"")*KOLUMN(D2:BC2)

När en cell är ifylld blir (D2:BC2<>"") = 1, annars 0. Så kolumnnumret multipliceras med 0 när cellen är tom och maxvärdet för kolumnnumret räknas bara när cellen är ifylld.

{=MAX((D2:BC2<>"")*KOLUMN(D2:BC2)))}

Måste vara matrisformel. För att slippa det är det enklast att lägga in den i en produktsumma:

=PRODUKTSUMMA(MAX((D2:BC2<>"")*KOLUMN(D2:BC2)))

Vilket ger kolumn 10 (j) som sista/högsta ifyllda kolumn.

Nu, när du vet det högsta kolumnnumret, kan du t.ex använda förskjutning (i förhållande till A-kolumnen) för att returnera rätt område

=PRODUKTSUMMA(MAX((D2:BC2<>"")*KOLUMN(D2:BC2))) - 5  ger rätt kolumn att starta i, sen utökar vi området med 5-steg åt höger

=FÖRSKJUTNING(A2;0;PRODUKTSUMMA(MAX((D2:BC2<>"")*KOLUMN(D2:BC2)))-5;1;5)

Och kollar medel på det

=MEDEL(FÖRSKJUTNING(A2;0;PRODUKTSUMMA(MAX((D2:BC2<>"")*KOLUMN(D2:BC2)))-5;1;5))

=AVERAGE(OFFSET(A2;0;SUMPRODUCT(MAX((D2:BC2<>"")*COLUMN(D2:BC2)))-5;1;5))

 

PS -varning

Förskjutning är lite trickigt även om det råkar bli rätt den här gången. När du går 10 steg till höger om A1 Hamnar du faktiskt i 11:e kolumnen, inte 10:e (som index skulle ha gjort). Normalt sett får man alltid klämma in -1 Men nu råkar det bli så lyckligt att när du tar -5 så hamnar du i 6:e kolumnen vilket är precis där du ville starta. Det normala är att man får man tänka till ett varv extra. Normalt sett skulle jag ha skrivit så här, dvs hitta J2 och utöka området -5 steg

=MEDEL(FÖRSKJUTNING(A2;0;PRODUKTSUMMA(MAX((D2:BC2<>"")*KOLUMN(D2:BC2)))-1;1;-5))

 Precis samma resultat men lite olika pedagogik. 

Nytt inlägg
 2017-10-24 18:41
 

Tack så mycket Ano för bra och pedagogiskt svar! Lösningen framstod plötsligt som väldigt enkel – men om jag skulle ha kommit på detta själv hade det nog tagit åratal :)

Tänkte på en sak: Om en av de fem veckorna  i intervallet skulle visa sig vara tom så löser formeln ju det genom att dividera summan med fyra istället. Medeltalet blir då helt korrekt, men om man skulle låta bli att fylla i den rutan eftersom man lade noll timmar den veckan så skulle division med 5 vara att föredra. Jag löser detta genom att byta ut AVERAGE mot SUM och dividera med 5, det vill säga
=SUM(OFFSET(A2;0;SUMPRODUCT(MAX((D2:BC2<>"")*COLUMN(D2:BC2)))-5;1;5))/5

Om man skulle utgå från att en tom kolumn står för semester så hade det varit intressant att se en formel som letar upp och returnerar genomsnittet för de fem högsta kolumnvärdena som inte är tomma eller innehåller bokstäver? Gissar att det genast blir mer komplicerat?

Nytt inlägg
 2017-10-25 10:53
 
 Ändrad av anonymous  på 2017-10-25 09:56:46

 Vet inte om jag förstår hur du menar.

Menar du att du bara vill lägga till bokstäver som ”uteslutningsvillkor”? Då kan du byta ut

(D2:BC2<>"")*   mot ÄRTAL:  (ISNUMBER(D2:BC2)*

Men då räcker inte produktsumman för att excel skall förstå att det är en matrisformel. Du måste ändå mata in med Ctrl+shift+enter.

Alternativ:

Om vi antar att du vill returnera värdet för de 5 högsta Veckonumren oavsett om det kommer tomma celler/ bokstäver emellan
(t.ex både före/efter semester) så tror jag att du får plocka ut dom en och en med hjälp av STÖRSTA (LARGE) som tillåter att du
hämtar ut det X-största värdet (radnumret) i en lista

Om du matar in de här formlerna som matrisformler (Ctrl+shift+enter) så får du kolumnnumret för den största,
näst största och tredje största kolumnnumret som innehåller en siffra

{=STÖRSTA(ÄRTAL(D2:BC2)*KOLUMN(D2:BC2);1)}

{=STÖRSTA(ÄRTAL(D2:BC2)*KOLUMN(D2:BC2);2)}

{=STÖRSTA(ÄRTAL(D2:BC2)*KOLUMN(D2:BC2);3)}

(LARGE, ISNUMBER, COLUMN)

Kolla hur det ändras om du skriver i 0:or, tal eller bokstäver i rad2

När du vet kolumnnumren kan du återigen fiska ut värdet med hjälp av FÖRSKJUT eller INDEX. Så här blir formeln för det största med hjälp av INDEX
(Hmm, jag vet att jag valde bort index av någon anledning i går, men nu kommer jag inte ihåg varför. Men, men: det blir kompaktare).

{=INDEX(A2:BD2;1;STÖRSTA(ÄRTAL(D2:BC2)*KOLUMN(D2:BC2);1))}

Sen skulle man kunna tro att man kan fiska ut de 5 största genom att lägga en matris i n:te största och summera

{=summa(INDEX(A2:BD2;1;STÖRSTA(ÄRTAL(D2:BC2)*KOLUMN(D2:BC2);{1;2;3;4;5})))}

Men det verkar inte gå, så du får räkna ihop var för sig (som jag tror att den blir med dina Svengelska inställningar). en kort och kompakt formel (du måste utöka formelfönstret om du villl se mer än en rad)...:

{=AVERAGE(INDEX(A2:BD2;1;LARGE(ISNUMBER(D2:BC2)*COLUMN(D2:BC2);1));
INDEX(A2:BD2;1;LARGE(ISNUMBER(D2:BC2)*COLUMN(D2:BC2);2));
INDEX(A2:BD2;1;LARGE(ISNUMBER(D2:BC2)*COLUMN(D2:BC2);3));
INDEX(A2:BD2;1;LARGE(ISNUMBER(D2:BC2)*COLUMN(D2:BC2);4));
INDEX(A2:BD2;1;LARGE(ISNUMBER(D2:BC2)*COLUMN(D2:BC2);5)))}

 

Möjliga Problem:

Det får inte stå några siffror i kolumn A:C. Det ger problem om mindre än 5 ”giltiga” värden

Nytt inlägg
 2017-10-25 20:19
 

 Ano, jag tror du förstod mig rätt även om jag kanske var lite otydlig.

Ang. möjliga problem: Det står faktiskt siffror i både kolumn B och C, vilket som du påpekar ställer till det om det saknas 5 giltiga värden – och det gör det ju under de fyra första veckorna om man börjar fylla i matrisen vecka 1. Det finns säkert någon lösning på det också? Gissar att det handlar om intervallet som INDEX refererar till? Jag förstår inte riktigt varför det börjar på A2, vad händer om man ändrar A2 till D2 istället? Det löser kanske inte problemet, men blev nyfiken på hur den delen av formeln funkar.

Nytt inlägg
 2017-10-26 15:07
 
 Ändrad av anonymous  på 2017-10-26 14:09:20

Det börjar på A2 för att det är bekvämast. STÖRSTA returnerar kolumnnummer. Om man börjar i A2 så slipper man räkna om det till position i D2:DC2  (dvs ta -3).

Hursomhelst. Det löser inte problemet att ändra idex-intervallet till D2:DC2  . Så fort det finns mindre än 5 tal så hamnar man på negativa index och då blir det konstigt ändå.

En variant är att du kör en OMsats och kollar om det finns X siffror ifyllda innan du inkluderar den x:te högsta kolumnen. Om det Exempelvis finns färre än 5 siffror i intervallet så returnerar Excel 0 istället för attt försöka hitta det 5:e minsta talet med den här formeln:

OM(ANTAL(D2:BC2)<5;0;INDEX(D2:BC2;1;STÖRSTA(ÄRTAL(D2:BC2)*KOLUMN(D2:BC2);5)-3))

OBS att ANTAL/COUNT bara räknar siffror (till skillnad mot ANTALV/CONTA). Så vi behöver inte skriva något villkor för den delen. 

För att få ut medel så åtegår vi till din ursprungsformel och summera varefter du dividerar med antal ifyllda tal 

{=SUMMA(
OM(ANTAL(D2:BC2)<1;0;INDEX(D2:BC2;1;STÖRSTA(ÄRTAL(D2:BC2)*KOLUMN(D2:BC2);1)-3));
OM(ANTAL(D2:BC2)<2;0;INDEX(D2:BC2;1;STÖRSTA(ÄRTAL(D2:BC2)*KOLUMN(D2:BC2);2)-3));
OM(ANTAL(D2:BC2)<3;0;INDEX(D2:BC2;1;STÖRSTA(ÄRTAL(D2:BC2)*KOLUMN(D2:BC2);3)-3));
OM(ANTAL(D2:BC2)<4;0;INDEX(D2:BC2;1;STÖRSTA(ÄRTAL(D2:BC2)*KOLUMN(D2:BC2);4)-3));
OM(ANTAL(D2:BC2)<5;0;INDEX(D2:BC2;1;STÖRSTA(ÄRTAL(D2:BC2)*KOLUMN(D2:BC2);5)-3))
)/ANTAL(D2:BC2)}

Svengelsk utan radbrytningar:

=SUM(IF(COUNT(D2:BC2)<1;0;INDEX(D2:BC2;1;LARGE(ISNUMBER(D2:BC2)*COLUMN(D2:BC2);1)-3));IF(COUNT(D2:BC2)<2;0;INDEX(D2:BC2;1;LARGE(ISNUMBER(D2:BC2)*COLUMN(D2:BC2);2)-3));IF(COUNT(D2:BC2)<3;0;INDEX(D2:BC2;1;LARGE(ISNUMBER(D2:BC2)*COLUMN(D2:BC2);3)-3));IF(COUNT(D2:BC2)<4;0;INDEX(D2:BC2;1;LARGE(ISNUMBER(D2:BC2)*COLUMN(D2:BC2);4)-3));IF(COUNT(D2:BC2)<5;0;INDEX(D2:BC2;1;LARGE(ISNUMBER(D2:BC2)*COLUMN(D2:BC2);5)-3)))/COUNT(D2:BC2)

Nytt inlägg
 2017-10-26 19:58
 

Toppen! Ska testa att lägga in din formel i matrisen imorgon ano. Stort tack för visat tålamod med alla mina frågor!

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerExcelExcelFormel för att ange resultat för fem senaste veckorna när dessa föregås av nollvärdenFormel för att ange resultat för fem senaste veckorna när dessa föregås av nollvärden

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter