In diesem Artikel erstellen wir eine benutzerdefinierte Funktion (User Defined Function, UDF), um die Anzahl der Arbeitstage zwischen den angegebenen Daten zu zählen, einschließlich oder ausschließlich Samstagen und Sonntagen als freie Wochen.

Die Rohdaten für dieses Beispiel bestehen aus einem Startdatum und einem Enddatum. Wir möchten die Anzahl der Arbeitstage zwischen diesen Daten zählen.

ArrowMain

Wir haben die Feiertagsdaten in der Spalte A im Blatt „Feiertage“ angegeben.

ArrowHolidayList

Excel verfügt über die integrierte Funktion NETWORKDAYS, mit der die Anzahl der Arbeitstage zwischen den Intervallen gezählt werden kann.

Syntax der NETWORKDAYS-Funktion NETWORKDAYS (StartDate, EndDate, [Holidays])

Diese Funktion schließt das in der Feiertagsliste angegebene Datum aus und zählt die Anzahl der Arbeitstage.

Diese Funktion betrachtet Samstage und Sonntage standardmäßig als Wochenurlaub, sodass wir die Anzahl der Arbeitstage nicht zählen können, falls wir nur eine Woche frei haben.

Wir haben die benutzerdefinierte Funktion „CountWorkingDays“ erstellt, um die Anzahl der Arbeitstage zwischen den Intervallen zu zählen. Diese benutzerdefinierte Funktion behandelt das Problem der NETWORKDAYS-Funktion. In dieser Funktion können wir die Anzahl der Arbeitstage zählen, auch wenn am Samstag oder Sonntag nur eine Woche frei ist.

Syntax der benutzerdefinierten Funktion

CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)

InclSaturdays und InclSundays sind optionale Parameter. Standardmäßig haben beide TRUE-Werte. Um Samstage und Sonntage in Arbeitstage umzuwandeln, ändern Sie den Wert des jeweiligen Parameters in FALSE.

Microsoft hat die Funktion NETWORKDAYS.INTL mit Excel 2010 eingeführt. Diese Funktion behandelt das Problem der Funktion NETWORKDAYS. In dieser Funktion können wir die freien Wochentage angeben. Wir können entweder einen oder zwei Tage als freie Woche angeben.

Syntax der NETWORKDAYS.INTL-Funktion

NETWORKDAYS.INTL (StartDate, EndDate, [Weekend], [Holidays])

Im Wochenendparameter können wir Wochentage angeben.

In diesem Beispiel verwenden wir alle drei oben genannten Funktionen, um die Anzahl der Arbeitstage zu zählen.

ArrowOutput

Logische Erklärung

In der Funktion „CountWorkingDays“ prüfen wir zunächst, ob das im Parameter angegebene Datum in der angegebenen Feiertagsliste vorhanden ist. Wenn das Datum in der Feiertagsliste vorhanden ist, wird dieser Tag nicht in die Anzahl der Arbeitstage einbezogen. Wenn das Datum nicht in der Feiertagsliste vorhanden ist, prüfen Sie, ob das angegebene Datum Samstag oder Sonntag ist. Überprüfen Sie anhand des angegebenen Eingabeparameters, ob Samstage oder Sonntage als Feiertage ein- oder ausgeschlossen werden sollen.

Code Erklärung

Setzen Sie RngFind = Arbeitsblätter („Feiertage“). Spalten (1) .Finden (i)

Der obige Code wird verwendet, um den Ort zu finden, an dem das angegebene Datum in der Feiertagsliste vorhanden ist.

Wenn RngFind nichts ist, wird mit GoTo ForLast End If Above Code überprüft, ob das angegebene Datum in der Feiertagsliste vorhanden ist. Wenn die Bedingung TRUE zurückgibt, wird dieser Tag nicht in die Anzahl der Arbeitstage einbezogen.

Bitte folgen Sie unten für den Code

Option Explicit

Function CountWorkingDays(StartDate As Long, EndDate As Long, Optional InclSaturdays As Boolean = True, _

Optional InclSundays As Boolean = True)

'Declaring variables

Dim RngFind As Range

Dim i As Long

For i = StartDate To EndDate



On Error Resume Next



'Finding the location where the specified date exist in the Holidays sheet

Set RngFind = Worksheets("Holidays").Columns(1).Find(i)



On Error GoTo 0



'Checking whether it is holiday on the given date

If Not RngFind Is Nothing Then

GoTo ForLast

End If



'Checking whether it is Saturday on given date

If InclSaturdays Then

If Weekday(i, 2) = 6 Then

GoTo ForLast

End If

End If



'Checking whether it is Sunday on given date

If InclSundays Then

If Weekday(i, 2) = 7 Then

GoTo ForLast

End If

End If



CountWorkingDays = CountWorkingDays + 1



ForLast:

Next

End Function

Wenn dir dieser Blog gefallen hat, teile ihn mit deinen Freunden auf Facebook und Facebook.

Wir würden gerne von Ihnen hören, lassen Sie uns wissen, wie wir unsere Arbeit verbessern und für Sie verbessern können. Schreiben Sie uns unter [email protected]