Just nu i M3-nätverket
Jump to content

Inverterad funktion, dvs returnera datumet för en vekca


marbe

Recommended Posts

Hej!

Jag har en veckoangivelse, i formatet string, som jag vill veta vilket datum som denna peiod avser.

Ex vill jag att strängen "0613" ska returnera måndagens datum v 13 2006, dvs 060327

Formeln veckonummer arbetar på motsatt sätt, men hkälper inte mig..

 

Function VECKONUMMER(datum As Date) As Integer

Dim lnDatum As Long

lnDatum = DateSerial(Year(datum - Weekday(datum - 1) + 4), 1, 3)

VECKONUMMER = Int((datum - lnDatum + Weekday(lnDatum) + 5) / 7)

End Function

 

mitt förslag till funktionen transform_date:

 

Function transfom_date(week As String) As Integer

Dim lnDatum As Long

lnDatum = xxx

transfom_date = xxx

End Function

 

Där xxx skall bytas ut mot kod, som alltså tar textsträngen (ÅÅVV, och returnerar ett datum enligt (YYMMDD)

 

Tacksam för hjälp!!

 

 

Link to comment
Share on other sites

mmh, kanske något likt detta:

[color="#0000ff"]Function[/color] tdate(week As [color="#0000ff"]String[/color]) As [color="#0000ff"]Date[/color]
    [color="#0000ff"]Dim[/color] lnDatum As Long
    [color="#0000ff"]Dim[/color] lnYear As Long
    [color="#0000ff"]Dim[/color] dDate As [color="#0000ff"]Date[/color]
    [color="#0000ff"]Dim[/color] lnWeek As Long
    [color="#0000ff"]Dim[/color] lnDay As Long
    lnDay = 1
    lnYear = [color="#0000ff"]Mid[/color](week, 1, 2)
    dDate = [color="#0000ff"]DateSerial[/color](lnYear, 1, 1)
    [color="#0000ff"]While[/color] VECKONUMMER([color="#0000ff"]DateSerial[/color](lnYear, 1, lnDay)) <> 1
        lnDay = lnDay + 1
    [color="#0000ff"]Wend[/color]
    lnWeek = [color="#0000ff"]Mid[/color](week, 3, 2)

    tdate = [color="#0000ff"]DateSerial[/color](lnYear, 1, (lnDay - [color="#0000ff"]Weekday[/color]([color="#0000ff"]DateSerial[/color](lnYear, 1, lnDay)) + 2) + 7 * (lnWeek - 1))

[color="#0000ff"]End[/color] [color="#0000ff"]Function[/color]

 

Verkar stämma men du får gärna felkolla den över några år. Den KRÄVER en sträng in med format YYWW, 0613 där 06 är året och 13 är veckan.

 

Vad gör den? Jo:

1: Tar reda på om 1 januari är del av årets veckonummer, annars stegar uppåt.

 

2: Datum för måndagen första veckan för aktuellt år beräknas

3: Adderar 7 * (antalet veckor -1 ) dagar till datumet och beräknar nya datumet.

 

Enkelt, rättframt som borde fungera.

 

Edit:

Ser att det är bäst att påpeka:

Funktionen VECKONUMMER() är given i första inlägget i denna tråd. Funktionen kommer ursprungligen från XLDennis sidor:

http://www.xldennis.se

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2006-04-04 15:12:42 av Monshi]

Link to comment
Share on other sites

Nu vet jag inte riktigt ifall jag missat något anat inlägg som denna tråd bygger på, men VECKONUMMER fungerar inte för mig.

I tråden

//eforum.idg.se/viewmsg.asp?EntriesId=612031

har vi diskuterat veckonummer tidigare och då skapade vi funktionen UDFWeekNumISO(InputDate As Date).

Om man lägger till den funktionen och anropar den istället för VECKONUMMER så funkar det.

 

/Pär B

 

Red.

Äsch, när skall man lära sig läsa... Hittade VECKONUMMER i första inlägget, men då kan det ändå vara värt för marbe att kolla tråden ovan för att få ett korrekt VECKONUMMER på annat sätt.

[inlägget ändrat 2006-04-04 14:00:55 av PerboMan]

[inlägget ändrat 2006-04-04 14:05:31 av PerboMan]

Link to comment
Share on other sites

Veckonummer-funktionen kommer, som du kanske vet, från XLDennis sida så den är nog korrekt...

 

Men annars - verkar funktionen stämma? För mig gjorde den det ivartfall.

 

Och ja - som moderator kan jag editera mitt inlägg ovan och förtydliga lite...

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...