Worksheet.nl  

Ga terug   Worksheet.nl > Excel Overig > Tips en Trics



Status bericht: Niet in behandeling
Reageren
 
LinkBack Discussietools Weergave
  #1  
Oud 8 februari 2008, 17:24
Mr. Magoo's schermafbeelding
Super Moderator
 
Geregistreerd: 17 november 2005
Locatie: Blokker Nederland
Berichten: 4.857
Standaard Datum naar weeknumer en vice versa in VBA

In mijn vorige ISOweeknumNaarDatum zat een klein foutje, hierbij de verbeterde versie
De fout had te maken met: als de eerste week van het jaar week 53 was zou niet de goede datum worden terugegeven.

Hierbij de Formules in VBA om:
  1. Datum naar weeknummer om te zetten
  2. Weeknummer naar datum om te zetten
Volgens de norm NEN 2772
NEN 2772 loopt wat betreft de nummering van de weken gelijk met ISO 8601.

Om de datum om te zetten naar weeknummer gebruiken we de datepart functie van VBA (=DatePart("ww", Datum, vbMonday, vbFirstFourDays))

Werkwijze om het weeknummer naar datum om te zetten

We pakken eerst 1 januari van het opgegeven jaar
Dan kijken we op 1 januari op een donderdag of eerder in de week valt.
Zo ja, valt 1 januari in week 1, anders is de volgende week de eerste week.
bereken het verschil in weken , vermenigvuldig met 7 = aantal dagen vanaf de eerste maandag in het jaar
tel daar dan nieuwjaarsdag (serial datum) bij op en je hebt de datum.

Om de code in je werkblad te gebruiken:
Datum naar weeknummer -> =ISOweeknum(celverwijzing naar datum of datum)
Weeknummer naar datum -> =ISOweeknumNaarDatum(celverwijzing naar Jaar of Jaar;celverwijzing naar weeknummer of weeknummer)

hieronder de VBA code:
Code:
Public Function ISOweeknumNaarDatum(ByVal Jaar As Integer, ByVal Week As Integer) As Date
  Dim Maandag As Date, IsoWeek As Integer

  Maandag = EersteMaandagJaar(Jaar)
  IsoWeek = ISOweeknum(Maandag)
  If IsoWeek = 53 Then IsoWeek = 1
  
  ISOweeknumNaarDatum = ((Week - IsoWeek) * 7) + Maandag
End Function

Public Function ISOweeknum(ByVal Datum As Date) As Integer
  ISOweeknum = DatePart("ww", Datum, vbMonday, vbFirstFourDays)
End Function

Private Function EersteMaandagJaar(ByVal Jaar As Integer) As Date
  Const DONDERDAG = 4
  Dim Nieuwjaar As Date, Weekdag As Integer

  Nieuwjaar = DateSerial(Jaar, 1, 1)
  Weekdag = DatePart("w", Nieuwjaar, vbMonday, vbFirstFourDays) - 1
  EersteMaandagJaar = Nieuwjaar - Weekdag
  If Weekdag > DONDERDAG Then EersteMaandagJaar = EersteMaandagJaar + 7
End Function
__________________
Suc6

druk op F1 en lees ! En zie wat de moeder van de meeste oplossingen is.
en Worksheet.nl is de dochter

Moderator www.worksheet.nl / mr.magoo@worksheet.nl

Lees informatieve columns over buitenlandse reizen en wandelingen in Nederland
Verrassende columns over het leven van alledag op een camping.
Optimistische columns over pubers, ouders en ouderen. op www.jolandacatharina.nl
Met citaat reageren
Sponsored Links
  #2  
Oud 11 juli 2008, 23:35
Senior Member
 
Geregistreerd: 10 oktober 2006
Locatie: Den Helder
Berichten: 128
Standaard

Mr. Magoo,

Bedankt, voor de uitleg, deze kan ik dan inderdaad goed gebruiken in mijn werkblad

mvg,
william
Met citaat reageren
  #3  
Oud 21 juli 2008, 16:01
GiMe's schermafbeelding
Super Moderator
 
Geregistreerd: 9 november 2006
Locatie: België
Berichten: 2.596
Standaard

Of kijk hier eens !
__________________
Groet,
GiMe Moderator
Mr.GiMe@worksheet.nl

Alles is relatief en zelfs dat..

Een bijlage (Excelvoorbeeldje met aanduiding van het gewenste resultaat) erbij betekent:
-dat de helper(s) niet de, meestal reeds bestaande, worksheet van de vrager moet(en) overtypen
-geen (ver)gissen mogelijk is bij de interpretatie van het proza
-men reeds kan anticiperen op toekomstige problemen
-veel vlugger tot een oplossing komt

kortom : Het wiel niet opnieuw dient uitgevonden te worden !
Met citaat reageren
  #4  
Oud 19 oktober 2010, 23:53
MikeTwo's schermafbeelding
Senior Member
 
Geregistreerd: 7 maart 2006
Locatie: Noord Brabant
Berichten: 249
Standaard

Mr. Magoo,

Ik wil je Function ISOweeknumNaarDatum gebruiken maar merk dat voor dit jaar de datum een week verschoven is.
Op mijn werk wordt gebruik gemaakt van de notatie yyww.d (oftewel jaar week.weekdag) bv vandaag dinsdag 19-10-2010 wordt genoteerd als 1042.2

Nu wil uit deze notatie de datum halen echter hij zit met de functie er een week langs.

Kan dit kloppen?

Mike
Met citaat reageren
Reageren


Discussietools
Weergave

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit
Trackbacks are Aan
Pingbacks are Aan
Refbacks are Aan



Ga terug   Worksheet.nl > Excel Overig > Tips en Trics


Soortgelijke discussies
Discussie Auteur Forum Reacties Laatste bericht
Datum (getal) omzetten naar datum (datum) Bergeijk Afgehandelde vragen 3 25 november 2011 16:28
Product opdelen in percentages nieuw product en vice versa? Ellen967 Afgehandelde vragen 2 11 februari 2011 08:42
Kolomletter naar Kolomnummer en Visa Versa Mr. Magoo Tips en Trics 0 6 oktober 2008 20:53
van rij naar kolom en vice versa bigfun Afgehandelde vragen 2 23 april 2008 10:53
Datum naar weeknumer en Visa Versa in VBA Mr. Magoo Afgehandelde vragen 6 18 mei 2007 17:23


Alle tijden zijn GMT +2. Het is nu 04:16.


Forumsoftware: vBulletin®, versie 3.8.7
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0