Så vidt jeg kan se er der ingen af datofunktionerne der umiddlebart kan opfatte et tilfældigt indtastet tal som et ugenummer. Derfor ved den selvfølgelig heller ikke, at den skal "starte forfra" ved 52/53.
Sorry. Den løsning jeg tænkte på virker heller ikke. Jeg kan simpelthen ikke finde en måde i Excel der "ved"/undersøger om et år har 52 eller 53 uger. Dermed vil alle tilløb til en løsning strande her.
Hvis du kan "leve med" at man selv indtaster det korrekte antal uger (52/53) for indeværende år, kan følgende funktion løse dit problem:
Function AddWeeks(UgeNr, PlusUger, AntalUger) If AntalUger > 53 Or AntalUger < 52 Then AddWeeks = "#UGEFEJL!" Else If UgeNr + PlusUger <= AntalUger Then AddWeeks = DateAdd("w", UgeNr, PlusUger) Else AddWeeks = DateAdd("w", UgeNr, PlusUger) - AntalUger End If Selection.ClearFormats End If End Function
Fx har du 51 i celle A1, 20 i celle A2 og antal uger i alt i celle A3. I den celle, hvor du vil have det nye ugetal, skriver du så bare =ADDWEEKS(A1;A2;A3). Hvis antal uger i alt er noget andet end 52 eller 53 vises en fejlmeddelelse i cellen som ved andre funktioner.
Jeg kan se at den stadig kan forbedres, da den ikke kan overstige et enkelt år. Er du fx i Uge 53 og vil lægge 53 uger til, regner den det ud til uge 53, hvilket sikkert er forkert, da der ikke nødvendigvis er 53 uger igen næste år, men desværre kalder arbejdet, så jeg har ikke lige tid til at gøre med ved den nu.
jkrons >> mange tak for din indsats ...... jeg lader lige spg stå åben lidt endnu, det kunne jo være at bak, b_hansen, janvogt, flemmingdahl eller en af de andre excel rødder havde noget at indvende :o)
Det kan godt lade sig gøre, at beregne hvilke år der er 53 uger. Omvendt tror jeg det vil være nemmere at regne i dage i stedet for. Det vil sige, at hvis du vil ligge 20 uger til, må det jo være ensbetydende med 140 dage (7x20), så hvis du ligger 140 dage til din startdato vil det komme til at passe, når du så senere skal omregne datoen til et ugenummer.
Forøvrigt kan man ikke bruge Excels UGE.NR funktion. Den regner ikke korrekt efter danske regler.
janvogt-> Problemet er joi at chewie ikke har en startdato, men en startuge (nummer). Hvis man har en startdato og regner i dage er der ingen problemer som du anfører.
Hvordan beregner du iøvrigt hvor mange uger, der er i et givent, tilfældigt år?
Skriv 51 i celle A1 Skriv 20 i celle A2 Skriv 2002 (årstallet) celle B1
Indsæt følgende formel i celle B2: =(INT((DATE(B1;12;31)-(DATE(YEAR(DATE(B1;12;31)+(MOD(8-WEEKDAY(DATE(B1;12;31));7)-3));1;1))-3+MOD(WEEKDAY(DATE(YEAR(DATE(B1;12;31)+(MOD(8-WEEKDAY(DATE(B1;12;31));7)-3));1;1))+1;7))/7)+1)
Indsæt følgende formel i celle A3: =A1+A2-IF(B2=53;53;52)
Sig til, hvis du skal have hjælp med oversættelsen. Jeg kan også sende dig arket. Har du en dansk version vil formlerne automatisk blive oversat.
Den langer formel skyldes som sagt, at =UGE.NR formlen ikke kan bruges til danske regler.
Jkrons, hvis chewie ikke har en startdato kunne han bare "konvertere" ugenummeret til en dato - eller med andre ord beregne, hvad den første dato i uge 51 er.
Tror ikke der findes en enkelt løsning til den her :-)
Formlen til at konvertere et ugenummer til en dato er =DATE(B110;1;7*B109-3-WEEKDAY(DATE(B110;;);3)) hvor ugenummeret står i B109 og årstallet i B110 så man må sige at der er lidt formellængde at spare :-)
Det kan jeg godt se, hvis du begynder at simulere på ugenummeret. Det skriver du jo ikke noget om, at du vil gøre :-)
For at løse det så prøver vi at gå tilbage til den løsning jeg først foreslår:
Skriv 51 i celle A1 Skriv 20 i celle A2 Skriv 2002 (årstallet) celle B1 Indsæt formlen =DATE(B1;1;7*A1-3-WEEKDAY(DATE(B1;;);3))+(7*A2) i celle B2 Indsæt formlen =INT((B2-(DATE(YEAR(B2+(MOD(8-WEEKDAY(B2);7)-3));1;1))-3+MOD(WEEKDAY(DATE(YEAR(B2+(MOD(8-WEEKDAY(B2);7)-3));1;1))+1;7))/7)+1 i celle A3
Tak! Har du tid kan du ewvt prøve denne ændrede løsning også, og se om den ikke virker nu - selv om det er for sent :-)
Function AddWeeks(UgeNr, PlusUger, AntalUger)
If (AntalUger + PlusUger) > AntalUger Then PlusUger = PlusUger - AntalUger End If
If AntalUger > 53 Or AntalUger < 52 Then AddWeeks = "#UGEFEJL!" Else If UgeNr + PlusUger <= AntalUger Then AddWeeks = DateAdd("w", UgeNr, PlusUger) Else AddWeeks = DateAdd("w", UgeNr, PlusUger) - AntalUger End If Selection.ClearFormats End If End Function
jkrons >> jeg har leget lidt vidre med løsningerne der er kommet ..... men jeg forstår ikke helt hvad A3 er i din løsning =ADDWEEKS(A1;A2;A3) ..... (glem det med omdøbning, min fejl)
jeg må indrømme ... selv om jeg har fået det til at funke med janvogts løsning er jeg blevet lidt mere hug på din ... da den ikke kræver mellemregningsceller ... jeg kan bare ikke få den til at funke :o/
Hvis du vil slippe for mellemregningsceller kan du bare indsætte formel-indholdet fra B2 alle de steder, hvor der i den lange A3-formel står "B2". Men det bliver formlen bestemt ikke mere overskuelig af :-)
Jkrons kode vil alligevel kræve, at man ved, hvor mange uger der er i det aktuelle år. Det er jo det, som gør det kompliceret. Hvis jeg også lavede den forudsætning, at det stod et eller andet sted, så ville formlen kunne laves MEGET kort.
Jeg har sendt et eksempel, så nu håber jeg det virker, men som janvogt siger kræver det at man selv ved hvor mange uger, der er i indeværende å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.