Avatar billede stanislaw Nybegynder
09. april 2007 - 16:06 Der er 25 kommentarer og
1 løsning

ugenummer igen-igen

Der har været en del bud på løse det problem som ligger i excel med hensyn til udregning af det rigtige ugenummer
Jeg vil sætte 300 point på kant, har desværre ikke flere, til den som kommer med den korteste og mest elegante formel til det.
den skal kunne finde ugenummer for alle uger i resten af dette århundrede.
Jeg er ikke selv kapapel nok til at være dommer men mon ikke at eksperterne kan klare det også.
Så er der det med en deadline men 1. maj kunne være et bud.
Var dette en ide eller er jeg helt ude i skoven ??
Avatar billede excelent Ekspert
09. april 2007 - 16:21 #1
Virker =UGE.NR(dato)  ikke ?
Avatar billede stanislaw Nybegynder
09. april 2007 - 16:28 #2
nej - prøv med 31.12.2007
Avatar billede passiflora Juniormester
09. april 2007 - 16:32 #3
Fandt lige denne ...

opret følgende funktion ...

Function ugenr(Dato)
ugenr = DatePart("ww", Dato, 2, 2)
End Function

og i arket skriver du så ugenr(a1)

Var det noget ...
Avatar billede passiflora Juniormester
09. april 2007 - 16:34 #4
Nej den duer heller ikke ...
Avatar billede erikjacobsen Ekspert
09. april 2007 - 17:04 #5
Avatar billede stanislaw Nybegynder
09. april 2007 - 17:20 #6
jeg bruger selv en som jeg har "lånt" her i dette forum http:\\www.eksperten.dk/spm/586699 som jeg har omskrevet til dansk.
den er rimelig stor og den fik mig på tanken
Avatar billede supertekst Ekspert
09. april 2007 - 17:55 #7
Forslag:
Sub test()
    unr = findUgeNr("31-12-2007")
End Sub
Private Function findUgeNr(dag As Date)
Dim ugeNr
    ugedag = DatePart("w", dag, 2, 2)
    If ugedag = 1 Then
        ugeNr = 1
    Else
        ugeNr = Format(dag, "ww", 2, 2)
    End If
    findUgeNr = ugeNr
End Function
Avatar billede supertekst Ekspert
09. april 2007 - 18:02 #8
Ups- lidt for meget "nytår":

Sub test()
    unr = findUgeNr("16-04-2007")
End Sub
Private Function findUgeNr(dag As Date)
Dim ugeNr, dg, md
    ugedag = DatePart("w", dag, 2, 2)
    dg = DatePart("d", dag, 2, 2)
    md = DatePart("m", dag, 2, 2)
   
    If ugedag = 1 And dg = 31 And md = 12 Then
        ugeNr = 1
    Else
        ugeNr = Format(dag, "ww", 2, 2)
    End If
    findUgeNr = ugeNr
End Function
Avatar billede kabbak Professor
09. april 2007 - 18:23 #9
hvad er der i vejen med den sbrander skriver om, det er den jeg bruger. ??
Avatar billede kabbak Professor
09. april 2007 - 18:24 #10
jeg har den sådan

Public Function UgeNr(Dato As Range)
UgeNr = Format(Dato, "ww", vbMonday, vbFirstFourDays)
End Function
Avatar billede excelent Ekspert
09. april 2007 - 18:30 #11
prøv 31-12-2007 kabbak - skal være uge 1 ikke 53
Avatar billede kabbak Professor
09. april 2007 - 19:39 #12
jeg giver dig ret, her er en som jeg fandt på nettet:


Public Function DateToWeek(ByVal datDate As Date, _
    Optional ByVal bytTruncFormat As Byte = 0, _
    Optional ByVal bytShortLongFormat As Byte = 0) As String
'******************************************************************************
'
' Macro created 2003-03-18 by Nikolai Sandved (nsaa@pvv.org)
'
' Description: This Function return the ISO8601 week
' This code appears on the site
' http://www.probabilityof.com/ISO8601.shtml
' http://www.probabilityof.com/excel.shtml
'
' The week calculations follow the ISO 8601 standard
' http://dmoz.org/Science/Reference/Standards/Individual_Standards/ISO_8601/
'
'
' Input:
'    datDate          - Microsoft Excel date
'  Optional
'    bytShortLongFormat 0 - Long format(default)    : YYYY-Www-D
'                      1 - Short format            : YYYYWwwD
'    bytTruncFormat 0 - Year, week and day(default) : YYYY-Www-D/YYYYWwwD
'                  1 - Year and week              : YYYY-Www/YYYYWww
'                  2 - Year                        : YYYY
'                  3 - Week and day                : Www-D/WwwD
'                  4 - Week                        : Www
'                  5 - Only Week                  : ww
' Output:
'    DateToWeek - A string following the pattern "YYYY-Www-D" (Default)
'
' Same calculations in Excel can be done like this (in US change ; to ,):
' Cell(A1) =date in Excel
' Cell(B1) =RIGHT("0" & 1+INT((A1-DATE(YEAR(A1+4-WEEKDAY(A1+6));1;5)
'            + WEEKDAY(DATE(YEAR(A1+4-WEEKDAY(A1+6));1;3)))/7);2)
' Cell(C1) =IF(AND(MONTH(A1)=12;B1="01");
'              YEAR(A1)+1;
'              IF(AND(MONTH(A1)=1;OR(B1="52";B1="53"));
'                YEAR(A1)-1;
'                YEAR(A1)))
'          &"-W" & B1 & "-" & WEEKDAY(A1;2)
'
'
'The following two rules applies when converting a gregorian date to the ISO week
'and vice versa
'Rule 1  January 4th. is always in week 01
'Rule 2  Always 52 or 53(leap week) ISO week in a given year: "A year has a leap
' week if and only if the corresponding Gregorian year begins on a Thursday or
' is a leap year begining on a Wednesday or a Thursday. By definition, its new
' year varies just 6 days against the Gregorian Calendar (3 days early to 3
' days late)."
'Rule 3  A ISO week start at a Monday(1) and ends at a Sunday (7)
'From http://serendipity.magnet.ch/hermetic/cal_stud/palmen/lweek1.htm
'
'Example rule 1
'    January 4th. 1993 is on a Monday(1993-01-04)
'        1993-01-03 -> 1992-W53-7
'        1993-01-04 -> 1993-W01-1
'    January 4th. 1998 is on a Sunday (1998-01-04)
'        1997-12-28 -> 1997-W52-7
'        1997-12-29 -> 1998-W01-1
'        1998-01-04 -> 1998-W01-7
'Example rule 2
'    Year start at a Thursday
'        1998-01-01 -> 1998-W01-4 (i.e a Thursday)
'        1998-12-31 -> 1998-W53-4 (->Leap week!)
'    Year start at a Wednesday and is a Leap year
'        1992-01-01 -> 1992-W01-3 (i.e a Wednesday)
'        1992-02-29 -> 1992-W09-6 (and a Leap Year)
'        1992-12-31 -> 1992-W53-4 (->Leap week!)
'    Year start at a Wednesday and is NOT a Leap year
'        1975-01-01 -> 1975-W01-3 (i.e a Wednesday)
'        1975-02-29 -> ERROR, No date, No Leap year
'        1975-12-28 -> 1975-W52-7
'        1975-12-29 -> 1976-W01-1 (No Leap week in 1975)
'
' Keyboard Shortcut:
'
'******************************************************************************
    '** Error Control
    On Error GoTo ErrorHandle

    ' ** Define variables
    Dim byteWeekNumber As Byte      'The weeknumber (Between 1 and 53)
    Dim strWeekNumber As String      'The weeknumber (Between 01 and 53)
    Dim intWeekYear As Integer      'The weeknumberyear ()
    Dim strShortLongFormat As String 'If long then "-"
   
    'Calculates the weeknumber
    'From http://www.cpearson.com/excel/weeknum.htm
    '=1+INT((A1-DATE(YEAR(A1+4-WEEKDAY(A1+6)),1,5)+
    '  WEEKDAY(DATE(YEAR(A1+4-WEEKDAY(A1+6)),1,3)))/7)
    byteWeekNumber = 1 + Int((datDate - DateSerial(Year(datDate + 4 _
        - Weekday(datDate + 6)), 1, 5) + Weekday(DateSerial(Year(datDate + 4 _
        - Weekday(datDate + 6)), 1, 3))) / 7)
   
    'Adds leading 0 to weeknumbers less than 10
    strWeekNumber = Right$("0" & byteWeekNumber, 2)
   
    'Calculates the correct week year if necesarry
    If bytTruncFormat < 3 Then
        'If weekyear is one year ahead
        If (Month(datDate) = 12 And strWeekNumber = "01") Then
            intWeekYear = Year(datDate) + 1
        'If weekyear is one year after
        ElseIf (Month(datDate) = 1 And (strWeekNumber = "52" _
                Or strWeekNumber = "53")) Then
            intWeekYear = Year(datDate) - 1
        'Same year
        Else
            intWeekYear = Year(datDate)
        End If
    End If 'bytTruncFormat < 3
                 
    ' If long format add "-"
    If bytShortLongFormat = 1 Then
        strShortLongFormat = ""
    Else
        strShortLongFormat = "-"
    End If
   
    'Selects correct truncated format
    Select Case bytTruncFormat
        Case 0
            DateToWeek = CStr(intWeekYear) & strShortLongFormat & "W" _
                & strWeekNumber & strShortLongFormat _
                & Weekday(datDate, vbMonday)
        Case 1
            DateToWeek = CStr(intWeekYear) & strShortLongFormat & "W" _
                & strWeekNumber
        Case 2
            DateToWeek = CStr(intWeekYear)
        Case 3
            DateToWeek = "W" & strWeekNumber & strShortLongFormat _
                & Weekday(datDate, vbMonday)
        Case 4
            DateToWeek = "W" & strWeekNumber
        Case 5
            DateToWeek = strWeekNumber
        Case Else
            DateToWeek = CStr(intWeekYear) & strShortLongFormat & "W" _
                & strWeekNumber & strShortLongFormat _
                & Weekday(datDate, vbMonday)
    End Select
   
Exit Function

ErrorHandle:
    '** Set the return error objects
    MsgBox ("Error code:" & CStr(Err) & Chr(13) & Chr(13) _
        & "Further Description: " & Error$)
   
End Function
Avatar billede stanislaw Nybegynder
09. april 2007 - 20:06 #13
Jeg kan se at jeg har udlovet mere end jeg må, så jeg vil åbne et nyt spørgsmål den 1. maj med de sidste 100 point så jeg kan komme af med alle 300 som skrevet.
Avatar billede kabbak Professor
09. april 2007 - 20:13 #14
det må du heller ikke, 200 ER MAKS
Avatar billede stanislaw Nybegynder
09. april 2007 - 20:21 #15
Ok så må jeg nøjes med de 200.
Avatar billede rosco Novice
10. april 2007 - 18:09 #16
Hvad med denne:

=AFKORT((A1-UGEDAG(A1;2)-DATO(ÅR(A1+4-UGEDAG(A1;2));1;-10))/7)
Avatar billede stanislaw Nybegynder
01. maj 2007 - 21:51 #17
supertekst hvordan bruger jeg din function
Avatar billede bak Forsker
01. maj 2007 - 22:02 #18
=AFKORT((A1-DATO(ÅR(A1+3-REST(A1-2;7));1;REST(A1-2;7)-9))/7)
Avatar billede stanislaw Nybegynder
01. maj 2007 - 22:56 #19
bak, den ser ud til at virke og er en smule kortere end den fra rosco så hvordan kommer jeg af med de 200 point
Avatar billede bak Forsker
01. maj 2007 - 22:59 #20
eller som vba-function

Function UgeNr(MyDate)
Dim Resten As Single
Resten = (MyDate - 2) Mod 7
UgeNr = Int((MyDate - DateSerial(Year(MyDate + 3 - Resten), 1, Resten - 9)) / 7)
End Function
Avatar billede bak Forsker
01. maj 2007 - 23:00 #21
så nu er der et svar, men del venligst med de andre. Der er også gode svar mellem dem :-)
Avatar billede stanislaw Nybegynder
01. maj 2007 - 23:04 #22
jeg har ikke prøvet at dele før så¨hvordan gør jeg det
Avatar billede bak Forsker
01. maj 2007 - 23:09 #23
Bed dem om at lægge et svar imorgen og del så point mellem dem der har svaret.....
g'nat :-)
Avatar billede rosco Novice
02. maj 2007 - 11:31 #24
Et svar fra mig
Avatar billede kabbak Professor
02. maj 2007 - 12:05 #25
et svar ;-))
Avatar billede stanislaw Nybegynder
02. maj 2007 - 21:27 #26
hvorfor står der afvist når jeg accepterede
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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