Avatar billede falslev Nybegynder
15. januar 2008 - 09:01 Der er 7 kommentarer og
1 løsning

Hvordan finder man første og sidste dato i en uge

Skal bruge et script som kan løbe alle ugerne i et år igennem og hver gang fortælle mig hvilke dato ugen starter og slutter med.
Men hvordan gør man lige det?
Avatar billede mikker Nybegynder
15. januar 2008 - 13:24 #1
Her er et eksempel til Excel

Sub sub1()
yr = "2008"
jan1 = Weekday("01-01-" & yr, vbMonday)
stdat = DateAdd("d", (1 - jan1), "01-01-" & yr)
sldat = DateAdd("d", 6, stdat)
wknum = Format(sldat, "ww", 2, 2)
yr1 = Format(sldat, "yyyy", 2, 2)
Do While yr1 = yr
Sheets("Ark1").Range("A" & wknum) = wknum
Sheets("Ark1").Range("B" & wknum) = stdat
Sheets("Ark1").Range("C" & wknum) = sldat
stdat = DateAdd("d", 1, sldat)
sldat = DateAdd("d", 6, stdat)
wknum = Format(stdat, "ww", 2, 2)
yr1 = Format(sldat, "yyyy", 2, 2)
Loop
End Sub
Avatar billede epimetheus Nybegynder
15. januar 2008 - 17:34 #2
Avatar billede epimetheus Nybegynder
15. januar 2008 - 23:49 #3
Prøv denne her.

Sub x()
  Dim År As Long
  Dim Uge As Long
  Dim FørsteDagIUgen As Date
  Dim SidsteDagIUgen As Date

  År = 2004

  For Uge = 1 To 53
    FørsteDagIUgen = DateSerial(År, 1, 7 * Uge - 3 - Weekday(DateSerial(År, 0, 0), 3))
    SidsteDagIUgen = DateAdd("d", 6, FørsteDagIUgen)
    If Year(DateAdd("d", 3, FørsteDagIUgen)) = År + 1 Then Exit Sub
  Next
End Sub


mikker > dit forslag tager ikke højde for år med 53 uger, hvilket år 2004 netop har.
Avatar billede epimetheus Nybegynder
15. januar 2008 - 23:52 #4
Uge 53 trikket går ud på at hoppe ud af løkken, hvis torsdag i uge "53" er året efter.

http://jeppesn.dk/uge.html
Avatar billede epimetheus Nybegynder
15. januar 2008 - 23:57 #5
For god ordens skyld, skal lige nævnes at jeg har hentet inspiration her.

http://www.eksperten.dk/spm/668703
Avatar billede falslev Nybegynder
16. januar 2008 - 07:34 #6
Tak for svar begge. epimetheus laver du lige et svar så du også kan få point
Avatar billede mikker Nybegynder
16. januar 2008 - 12:14 #7
Hvor f.... blev min kommentar af?
Jeg lavede en ny udgave i morges derhjemme og skrev en kommentar.
Hulke, græde, kagle.

Brugen af DateSerial gør koden lidt kortere.

Anyway, epimetheus, får vi ikke samme resultat hvis jeg gør således?

Sub sub1()
yr = 2009
jan1 = Weekday("01-01-" & yr, vbMonday)
stdat = DateAdd("d", (1 - jan1), "01-01-" & yr)
sldat = DateAdd("d", 6, stdat)
wknum = Format(sldat, "ww", 2, 2)
Do
Sheets("Ark1").Range("A" & wknum) = wknum
Sheets("Ark1").Range("B" & wknum) = stdat
Sheets("Ark1").Range("C" & wknum) = sldat
stdat = DateAdd("d", 1, sldat)
sldat = DateAdd("d", 6, stdat)
wknum = Format(stdat, "ww", 2, 2)
If wknum = 1 Then Exit Do
Loop
End Sub
Avatar billede epimetheus Nybegynder
16. januar 2008 - 15:28 #8
mikker > Så får vi samme resultat, selv når der er 53 uger i et år :-)

falslev > Jeg samler ikke på point, så dem beholder du bare, eller giver til mikker.
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
Kurser inden for grundlæggende programmering

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