moeller67
Goto Top

Werktage pro Monat eines Von- und Bis-Zeitraums

Ich möchte die Werktage pro Monat eines Von- und Bis-Zeitraums bestimmen.
In einer Tabelle habe ich ein von-und bis-Datumsfeld. Bei Monatsübergreifenden Zeiten,
möchte ich nur die Anzahl Werktage des von mir ausgewählten Monats ausgeben.

Beispiel:

VonDatum BisDatum ausgewählte_Monat Werktage_ausgewählteMonat
18.02.2008 12.03.2008 2 10
02.03.2008 05.03.2008 2 0
11.02.2008 13.02.2008 2 3
25.02.2008 14.03.2008 2 15

Bitte hilfe!!!

Content-ID: 81365

Url: https://administrator.de/forum/werktage-pro-monat-eines-von-und-bis-zeitraums-81365.html

Ausgedruckt am: 23.12.2024 um 18:12 Uhr

misterdemeanor
misterdemeanor 22.02.2008 um 12:44:29 Uhr
Goto Top
Hallo,

lade Dir mal die KnowHow MDB herunter

Dort findest Du die optimale lösung Deines Problems.

BG, Felix -misterdemeanor-
moeller67
moeller67 22.02.2008 um 13:12:15 Uhr
Goto Top
Die Datenbank habe ich bereits, doch da habe ich nicht das Passende gefunden. Trotzdem schonmal danke.
misterdemeanor
misterdemeanor 22.02.2008 um 13:15:33 Uhr
Goto Top
?

Im Suchformular fktAnzWerktage eingeben.

Function fktAnzWerktage(datumvon As Date, datumbis As Date, Bundesland As String) As Long

'Die Funktion ermittelt die Anzahl der Werktage (Mo - Fr) zwischen Datumvon und Datumbis  
misterdemeanor
misterdemeanor 22.02.2008 um 13:31:19 Uhr
Goto Top
Wenn es Dir aber wirklich nur darum geht Sa´s und So´s auszuschließen, sprich keine Berücksichtigung von Feiertagen:

Public Function DateDiffWorkdays(Date1 As Date, Date2 As Date, Optional ByVal SaturdayIsWorkday As Boolean) As Integer
    Dim nDay1 As Date
    Dim nDay2 As Date
    Dim nDays As Integer
    Dim nWeeks As Integer
    Dim nWeekday1 As Integer
    Dim nWeekday2 As Integer
    
    If Date1 < Date2 Then
        nDay1 = CDate(CLng(CDbl(Date1)))
        nDay2 = CDate(CLng(CDbl(Date2)))
    Else
        nDay1 = CDate(CLng(CDbl(Date2)))
        nDay2 = CDate(CLng(CDbl(Date1)))
    End If
    nDays = nDay2 - nDay1
    nWeeks = nDays \ 7
    nWeekday1 = Weekday(nDay1, vbMonday)
    nWeekday2 = Weekday(nDay2, vbMonday)
    If SaturdayIsWorkday Then
        nDays = nDays - nWeeks
        Select Case nWeekday1
            Case 7
                Select Case nWeekday2
                    Case 7
                    Case Else
                        nDays = nDays - 1
                End Select
            Case Else
                Select Case nWeekday2
                    Case 7
                    Case Else
                        If nWeekday1 > nWeekday2 Then
                            nDays = nDays - 1
                        End If
                End Select
        End Select
    Else
        nDays = nDays - 2 * nWeeks
        Select Case nWeekday1
            Case 6
                Select Case nWeekday2
                    Case 7
                        nDays = nDays - 1
                    Case Else
                        nDays = nDays - 2
                End Select
            Case 7
                Select Case nWeekday2
                    Case Is < 7
                        nDays = nDays - 1
                End Select
            Case Else
                Select Case nWeekday2
                    Case 6
                    Case 7
                        nDays = nDays - 1
                    Case Else
                        If nWeekday1 > nWeekday2 Then
                            nDays = nDays - 2
                        End If
                End Select
        End Select
    End If
    DateDiffWorkdays = nDays
End Function

Quelle:http://www.aboutvb.de/khw/artikel/khwdatediffworkdays.htm