Avatar billede lempert75 Nybegynder
21. december 2010 - 23:46 Der er 2 kommentarer og
1 løsning

ÅR og UGE formel

På baggrund af en dato(skrevet i K5 i nedenstående eksempel) vil jeg i en anden celle gerne have vist eksempelvis "2010 uge 52". Hvis det er en af de første 9 uger vil jeg gerne have vist eksempelvis 2011 uge 05" (IKKE 2011 uge 5). Og hvis det eksempelvis er den 01.01.11 vil jeg have vist 2010 uge 52 og hvis det er den 31.12.2008 vil jeg have vist 2009 uge 01. Den skal fungere på alle år/uger frem og tilbage i tiden(så UGE.NR-formlen duer ikke rigtig)

Ved at hugge lidt her og der har jeg konstrueret følgende formel:

=HVIS(OG(MÅNED(K5)=12;HELTAL((K5-DATO(ÅR(K5-UGEDAG(K5-1)+4);1;3)+UGEDAG(DATO(ÅR(K5-UGEDAG(K5-1)+4);1;3))+5)/7)<2);ÅR(K5)+1;HVIS(OG(MÅNED(K5)=1;HELTAL((K5-DATO(ÅR(K5-UGEDAG(K5-1)+4);1;3)+UGEDAG(DATO(ÅR(K5-UGEDAG(K5-1)+4);1;3))+5)/7)>5);ÅR(K5)-1;ÅR(K5)))&HVIS(LÆNGDE(HELTAL((K5-DATO(ÅR(K5-UGEDAG(K5-1)+4);1;3)+UGEDAG(DATO(ÅR(K5-UGEDAG(K5-1)+4);1;3))+5)/7))=1;" UGE 0"&HELTAL((K5-DATO(ÅR(K5-UGEDAG(K5-1)+4);1;3)+UGEDAG(DATO(ÅR(K5-UGEDAG(K5-1)+4);1;3))+5)/7);" UGE "&HELTAL((K5-DATO(ÅR(K5-UGEDAG(K5-1)+4);1;3)+UGEDAG(DATO(ÅR(K5-UGEDAG(K5-1)+4);1;3))+5)/7))

Som faktisk virker helt perfekt, jeg har ihvertfald ikke kunne finde fejl ved den.

MEN dels er den meget lang og ikke særlig elegant og dels har jeg nået MAX af indlejringsniveauer i excel 2003 og tidligere.

I nogle tilfælde kan jeg nemlig få behov for at skyde en =hvis(k5="";"";"HELE DEN LANGE FORMEL OVENFOR") og så er der for mange indlejringer i 2003 og tidl.

Kan formlen laves med færre indlejringsniveauer?
Avatar billede anlu Nybegynder
22. december 2010 - 08:09 #1
Hvis der må bruges lidt macro/VBA, så kan du lægge disse formler i et modul:

Public Function ISOWeekNum(dt As Date) As Integer
    ISOWeekNum = DatePart("ww", dt, vbMonday, vbFirstFourDays)
End Function

Public Function WeekAndYear(dt As Date) As String
    If ISOWeekNum(dt) = 1 And Month(dt) = 12 Then
        WeekAndYear = Year(dt) + 1 & " uge " & Format(ISOWeekNum(dt), "00")
    ElseIf ISOWeekNum(dt) > 50 And Month(dt) = 1 Then
        WeekAndYear = Year(dt) - 1 & " uge " & Format(ISOWeekNum(dt), "00")
    Else
        WeekAndYear = Year(dt) & " uge " & Format(ISOWeekNum(dt), "00")
    End If
End Function


Du har da formlerne til rådighed i arket og kan skrive fx
=HVIS(K5="";"";WeekAndYear(K5))

Du kan selvfølgelig også bruge ISOWeekNum direkte i arket for at få rigtig ugenr (i stedet for UGE.NR)
Avatar billede lempert75 Nybegynder
22. december 2010 - 10:56 #2
Det er lige i øjet. Hvorfor har jeg dog ikke selv fundet ISOWeekNum-formlen? Løsningen med at lave funktionen i VBA er helt perfekt til det behov jeg har. Tak for hjælpen. Giv et svar, så du kan få dine point.
Avatar billede anlu Nybegynder
22. december 2010 - 11:03 #3
Glad for at du kan bruge det :o)
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
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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