Just nu i M3-nätverket
Gå till innehåll

Veckonummer från datum


Smaragd

Rekommendera Poster

Hej,

 

Jag har en function i ett excel worksheet som utifrån en datum i formen 2010-11-18 angivet i cell A2 tar fram rätt veckonummer. I detta fall W1046, alltså År 10 och vecka 46.

Min funktion ser ut så här:

OBS! den glada gubben efter =TEXT("W" är semikolon och slutparentes. Varför det blir glad gubbe här vet jag inte.

 

=TEXT("W";)&RIGHT(YEAR(MID(A2;1;9));2)&IF(INT((A2-SUM(MOD(DATE(YEAR(A2-MOD(A2-2;7)+3);1;2);{1E+99;7})*{1;-1})+5)/7)<10;(0&(INT((A2-SUM(MOD(DATE(YEAR(A2-MOD(A2-2;7)+3);1;2);{1E+99;7})*{1;-1})+5)/7)));(INT((A2-SUM(MOD(DATE(YEAR(A2-MOD(A2-2;7)+3);1;2);{1E+99;7})*{1;-1})+5)/7)))

 

Jag har försökt skriva detta i VB-kod men får inte till det.

Någon som kan hjälpa till?

 

Tack på förhand,

/Lennart

Länk till kommentar
Dela på andra webbplatser

Enkelt tips:

Spela in ett makro när du skriver in funktionen. Bara slå på inspelningen, klicka i cell där funktionen står, klicka enter. Stoppa sedan inspelningen och ta en titt på vad som står...

 

Då får du in formeln så som den skulle skrivas i VBA-kod för att skrivas till bladet.

 

Fast du kanske menar att du vill implementera denna formel i ren VBA-kod?

Om så är fallet, då får vi attackera det då men det är inget jag gör utan bekräftelse..

Länk till kommentar
Dela på andra webbplatser

Gäst ParboMan

...

Fast du kanske menar att du vill implementera denna formel i ren VBA-kod?

Om så är fallet, då får vi attackera det då men det är inget jag gör utan bekräftelse..

 

 

Problemet behöver inte attackeras. Det finns tidigare lösningar, både hos xlDennis och här:

//eforum.idg.se/topic/110349-visa-veckonummer-i-word/

 

/Pär B

Länk till kommentar
Dela på andra webbplatser

Hej och tack för alla svar.

Jag får fortfarande inte till det riktigt tyvärr. Har nog för dåliga kunskaper i VB.

Slog in koden i VB-editorn som fanns i den andra tråden.

 

Function UDFWeekNumISO(InputDate As Date)
   UDFWeekNumISO = DatePart("ww", InputDate, _
   vbMonday, vbFirstFourDays)
   [color="#ff0000"]If UDFWeekNumISO=53 And Day(InputDate)>28 _
   And WeekDay(InputDate)=vbMonday Then UDFWeekNumISO=1
End Function

 

Pekaren ställer sig på if och ett förnster ploppar upp och säger.

Compile error Expected: expression

Allt från [color, till ISO=1 blir i röd text också.

 

Dessutom förstår jag inte hur jag använder "function" från mitt worksheet.

Hur gör jag i mitt worksheet för att få funktionen att jobba?

 

I mitt worksheets cell A2 har jag formeln Today() som ger mig datumet som 2010-11-19

I mitt worksheets cell A1 har jag min långa formel som jag vill ha in i ett macro istället. Jag tror att min formel också tar hänsyn till vilken som är årets första vecka (minst 4 dagar). dessutom skriver min formel vecka 1 som 01, så att det blir W1101, W1102 osv.

Har också testat att spela in macrot som föreslogs ovan, men det fungerade inte heller.

Länk till kommentar
Dela på andra webbplatser

VB eller VBA?

Eftersom du pratar om Excel antar jag VBA.

 

 

Men men - något har gått galet i inlägget du kopierat ifrån, Color-delen ska inte stå där, det ska bara stå

Function UDFWeekNumISO(InputDate As Date)
UDFWeekNumISO = DatePart("ww", InputDate, _
vbMonday, vbFirstFourDays)
If UDFWeekNumISO = 53 And Day(InputDate) > 28 _
	And Weekday(InputDate) = vbMonday Then UDFWeekNumISO = 1
End Function

 

Har inte verifierat att koden stämmer, resultatet stämmer, men jag tror vi kan utgå från att den gör det.

 

Kopiera koden, klistra in i en modul och används som vilken annan funktion som helst.

Länk till kommentar
Dela på andra webbplatser

Hej igen,

 

Ok, det här med color stod i den gamla tråden så jag utgick från att det skulle vara med. Nu tog modulen koden ok. (Jag är i Excel så jag pratar nog om VBA? Vad är skillnaden?)

 

Function UDFWeekNumISO(InputDate As Date)
   UDFWeekNumISO = DatePart("ww", InputDate, _
   vbMonday, vbFirstFourDays)
   If UDFWeekNumISO = 53 And Day(InputDate) > 28 _
   And WeekDay(InputDate) = vbMonday Then UDFWeekNumISO = 1
End Function

 

Nu skriver jag följande i min cell A1:

=UDFWeekNumISO(A2)

där alltså A2 innehåller formeln

=Today()

som visar dagens datum på formen YYYY-MM-DD, 2010-11-19

 

Fortfarande får jag ett felmeddelande i min modul på

WeekDay

 

Compile error:

Wrong numbers of argumentor invalid property assignment.

 

Vad gör jag för fel?

Länk till kommentar
Dela på andra webbplatser

Gäst ParboMan

...

Har inte verifierat att koden stämmer, resultatet stämmer, men jag tror vi kan utgå från att den gör det.

 

Kopiera koden, klistra in i en modul och används som vilken annan funktion som helst.

 

Jodå, koden stämmer.

Datepart finns dokumenterat här:

http://techonthenet....as/datepart.php

 

Men, eftersom den har en bugg som ger fel veckonummer i vissa specialfall så är det tvunget att ha den korrigerande if-satsen.

 

Om man ska åstadkomma precis det format som Smaragd efterfrågar så kan man lämpligen använda följande funktion:

Function W_VeckoNummer(InputDate As Date) As String
             Dim VeckoNummer as Single
             VeckoNummer = DatePart("ww", InputDate, vbMonday, vbFirstFourDays)
             If Veckonummer = 53 And Day(InputDate)>28 then Veckonummer = 1
             W_VeckoNummer = "W" & Format(InputDate, "YY") & Format(VeckoNummer, "00")
End Function

Det enda jag är lite fundersam på är hur årtalet ska hanteras när man exempelvis matar in 2008-12-31, ska det bli W0801 eller W0901. Nu blir det W0801, ska det bli W0901 får funktionen justeras.

Detsamma gäller 2010-01-01, nu blir det W1053...

 

/Pär B

Länk till kommentar
Dela på andra webbplatser

Gäst ParboMan

TS verkar ha generella problem med koden, skickar här upp en exempelbok som TS kan titta på och se hur det ska se ut.

 

 

Insåg när jag testade att jag gjort ett fel i bugfixen. If-satsen ska vara som i Monshis exempel.

Dock kunde jag inte låta bli att koda båda varianterna av årtalshantering.

 

Se bifogad fil.

 

/Pär B

W_VeckoNummer.xls

Länk till kommentar
Dela på andra webbplatser

Tackar för era ansträngningar,

 

Det verkar som att denna kod är den som gör rätt i Pärs excel-fil

 

Function W_VeckoNummerA(InputDate As Date) As String
   Dim VeckoNummer As Single
   VeckoNummer = DatePart("ww", InputDate, vbMonday, vbFirstFourDays)
   If VeckoNummer = 53 And Day(InputDate) > 28 And WeekDay(InputDate) = vbMonday Then VeckoNummer = 1
   W_VeckoNummerA = "W" & Format(InputDate, "YY") & Format(VeckoNummer, "00")
End Function

 

När jag använder den så får jag emellertid samma felmeddelande som innan på WeekDay i koden. Compile error, Wrong numbers of argumentor invalid property assignment.

 

Lennart B

Länk till kommentar
Dela på andra webbplatser

Gäst ParboMan

...

När jag använder den så får jag emellertid samma felmeddelande som innan på WeekDay i koden. Compile error, Wrong numbers of argumentor invalid property assignment.

 

Lennart B

 

 

Vilken version av Excel kör du? Vad jag kan se så är det andra argumentet i Weekday optional i 2003 - 2007. Nåväl, det går ju att lägga till, och då ska du skriva Weekday(InputDate, 1)=vbMonday.

 

/Pär B

Länk till kommentar
Dela på andra webbplatser

Nej, i filerna ni skickat upp verkar det fungera bra.

Jag stängde min fil och öppnade en ny. Då verkar det fungera.

 

Tack till alla för kanongod hjälp. Poäng kommer.

Nu stänger vi tråden

 

MVH / Lennart B (Smaragd)

 

Sorry såg inte sista inlägget.

Kör Excel 2003 SP3

Gammal version, jag vet.

Nu verkar det i alla fall fungera.

Tack igen.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...