Berechnen Sie die Anzahl der Arbeitstage zwischen zwei Daten mit VBA in Microsoft Excel
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.
Wir haben die Feiertagsdaten in der Spalte A im Blatt „Feiertage“ angegeben.
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.
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]