• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Weekdagen per maand

Status
Niet open voor verdere reacties.

Evelthoven

Gebruiker
Lid geworden
26 sep 2006
Berichten
690
Goedenavond,

Omdat dit een nieuwe vraag is die deels te maken heeft met hetzelfde bestand waarover ik mijn vorige vraag heb gesteld, en die al opgelost is, heb ik er toch een nieuw onderwerp van gemaakt. Ik heb een voorbeeld bijgesloten met de vraag erin. Wat ik graag wil is dat ik een overzicht heb van het aantal weekdagen per maand in een willekeurig jaar in cel A2.
 

Bijlagen

  • Weekdagen per maand.xlsx
    11,4 KB · Weergaven: 37
Daar is vast een mooie matrixfunctie voor te maken maar ik doe het zo. Plaats deze functie in een module.
Aanroep in C4 is dan: =TelDagen($B4;C$2;$A$2)

Code:
Function TelDagen(Dag As String, Maand As String, Jaar As Integer) As Integer
    Dim i As Integer
    Dim iYear As Integer
    Dim iMonth As Integer
    Dim iDay As Integer
    Dim iMatchDay As Integer
    Dim iDaysInMonth As Integer
    Dim FullDate As String
    Dim FullDateNew As Date

    sDay = Dag
    sMonth = Maand
    iYear = Jaar
    
    Select Case LCase(sMonth)
        Case "januari":     iMonth = 1
        Case "februari":    iMonth = 2
        Case "maart":       iMonth = 3
        Case "april":       iMonth = 4
        Case "mei":         iMonth = 5
        Case "juni":        iMonth = 6
        Case "juli":        iMonth = 7
        Case "augustus":    iMonth = 8
        Case "september":   iMonth = 9
        Case "oktober":     iMonth = 10
        Case "november":    iMonth = 11
        Case "december":    iMonth = 12
    End Select
    
    Select Case LCase(sDay)
        Case "zondag":      iDay = 1
        Case "maandag":     iDay = 2
        Case "dinsdag":     iDay = 3
        Case "woensdag":    iDay = 4
        Case "donderdag":   iDay = 5
        Case "vrijdag":     iDay = 6
        Case "zaterdag":    iDay = 7
    End Select

    Fulldate = "01-" & iMonth & "-" & iYear
    iMatchDay = Weekday(Fulldate)
    iDaysInMonth = Day(DateAdd("d", -1, DateSerial(Year(Fulldate), Month(Fulldate) + 1, 1)))
    FullDateNew = DateSerial(Year(Fulldate), Month(Fulldate), iDaysInMonth)

    For i = iDaysInMonth - 1 To 0 Step -1
        If Weekday(FullDateNew - i) = iDay Then
            TelDagen = TelDagen + 1
        End If
    Next i

End Function
 
Laatst bewerkt:
Misschien kan je hier iets mee ?
 

Bijlagen

  • Weekdagen per maand.xlsx
    13,7 KB · Weergaven: 29
Buiten het feit dat ik weer een mooie VBA procedure zie en een schitterende array-formule, vraag ik me in alle opperste nieuwsgierigheid af wat je met deze gegevens gaat doen? Daar ben ik echt heel benieuwd naar... ;)
 
@mvw64, ik moet je helaas melden dat je oplossing niet geheel juist is... Ik had zelf ook een kleine toevoeging gemaakt met een sub-procedure en een knop, zodat er ineens 3 vormen van keuzes zijn voor de TS. Toen zag ik verschillen tussen jouw en mijn uitkomsten. Daarop heb ik een sheet met alle dagen van 2015 aangemaakt en daar een pivot table aan gekoppeld. Die was het eens met mijn uitkomst. Ook de versie van Edmoor heb ik toegevoegd en ook die was het eens met mijn opties. Misschien dat je nog kan ontdekken wat er niet goed gaat aan je formule?

@EVELTHOVEN, je hebt nu dus ineens 4 mogelijkheden - waarvan 1 nog niet helemaal goed - waar je uit kan kiezen (zie bijlage). En nu ben ik nóg benieuwder naar de reden van je vraag... ;)
 

Bijlagen

  • Weekdagen per maand.xlsm
    45 KB · Weergaven: 39
Hahaha! Julius Caesar kan weer trots zijn :p
 
Daar is vast een mooie matrixfunctie voor te maken

Uiteraard.

Selecteer C4 t/m C10, type in de formule:
Code:
=INTERVAL(WEEKDAG(DATUM($A$2;KOLOMMEN($C4:C4);1)+RIJ(INDIRECT("1:"&DAG(LAATSTE.DAG(DATUM($A$2;1;1);KOLOMMEN($C4:C4)-1))))-1;2);RIJ(INDIRECT("1:7")))
sluit af met Ctrl+Shift+Enter, sleep C4:C10 naar rechts t/m N4:N10 (geen opmaak doorvoeren),

en je hebt dit:

Bekijk bijlage Weekdagen per maand MB.xlsx
 
Ik dacht meer aan de volgende matrix-formule:

=SUM(N(WEEKDAY(DATE($A$2;COLUMN()-2;ROW($1:$31));2)=ROW()-3)*(MONTH(DATE($A$2;COLUMN()-2;ROW($1:$31)))=COLUMN()-2))


invoeren in C4, doortrekken tot het gewenste gebied.
 
Laatst bewerkt:
Ik dacht meer aan de volgende matrix-formule:

=SUM(N(WEEKDAY(DATE($A$2;COLUMN()-2;ROW($1:$31));2)=ROW()-3)*(MONTH(DATE($A$2;COLUMN()-2;ROW($1:$31)))=COLUMN()-2))

Vertaald in het nederlands:
Code:
=SOM(N(WEEKDAG(DATUM($A$2;KOLOM()-2;RIJ($1:$31));2)=RIJ()-3)*(MAAND(DATUM($A$2;KOLOM()-2;RIJ($1:$31)))=KOLOM()-2))

Deze kan weer toegevoegd worden aan de galerij der goede oplossingen. :thumb:
 
Maak er een somproduct van, dan hoef je niet uit te leggen dat het als matrixformule moet worden ingevoerd.
Code:
=SOMPRODUCT(N(WEEKDAG(RIJ(INDIRECT(DATUM($A$2;KOLOM()-2;1)&":"&LAATSTE.DAG(DATUM($A$2;KOLOM()-2;1);0)));2)=RIJ()-3))
 
of
=SUMPRODUCT(N(WEEKDAY(DATE($A$2;COLUMN()-2;ROW(OFFSET($A$1;;;DAY(DATE($A$2;COLUMN()-1;0)))));2)=ROW()-3))
 
Allereerst iedereen bedankt voor de bijdrage aan de oplossing.

@Ginger

De reden van deze vraag:
de resultaten van bepaalde maanden in bepaalde jaren kan ik gebruiken in een ander bestand dat ik gebruik. Ik hoef nu alleen maar de resultaten te kopieren en deze kan ik dan als vaste uitkomsten plakken in mijn bestand. Misschien nog een beetje onduidelijk, maar ik ben blij en ik kan er goed mee vooruit.

Nogmaals bedankt allemaal.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan