Berechnen Sie die Anzahl der Arbeitstage zwischen zwei Daten mit VBA in Microsoft Excel

Anonim

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

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

Die Feiertagsdaten haben wir in der Spalte A im Blatt „Ferien“ angegeben.

Excel hat eine eingebaute Funktion, NETWORKDAYS, um die Anzahl der Arbeitstage zwischen dem Intervall zu zählen.

Syntax der Funktion NETZWERKTAGE

NETZWERKTAGE(StartDatum, EndDatum,[Feiertage])

Diese Funktion schließt das in der Feiertagsliste angegebene Datum aus, während die Anzahl der Arbeitstage gezählt wird.

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

Wir haben die benutzerdefinierte Funktion "CountWorkingDays" erstellt, um die Anzahl der Arbeitstage zwischen dem Intervall zu zählen. Diese benutzerdefinierte Funktion behandelt das Problem der Funktion NETZWERKTAGE. 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 Werktage umzuwandeln, ändern Sie den Wert des jeweiligen Parameters auf 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 arbeitsfreien Tage festlegen. Wir können entweder einen oder zwei Tage als freie Woche angeben.

Syntax der Funktion NETWORKDAYS.INTL

NETWORKDAYS.INTL(StartDate, EndDate, [Wochenende], [Feiertage])

Im Parameter Wochenende können wir Wochentage angeben.

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

Logikerklärung

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

Codeerklärung

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

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

Wenn nicht RngFind nichts ist, dann

GoTo ForLast

Ende Wenn

Der obige Code wird verwendet, um zu überprüfen, ob das angegebene Datum in der Feiertagsliste vorhanden ist. Wenn die Bedingung TRUE zurückgibt, wird dieser Tag nicht in die Anzahl der Arbeitstage gezählt.

Bitte folgen Sie unten für den Code

 Option Explizite Funktion CountWorkingDays(StartDate As Long, EndDate As Long, Optional InclSaturdays As Boolean = True, _ Optional InclSundays As Boolean = True) 'Variablen deklarieren Dim RngFind As Range Dim i As Long For i = StartDate To EndDate On Error Resume Next ' Suchen des Ortes, an dem das angegebene Datum im Feiertagsblatt vorhanden ist Set RngFind = Worksheets("Holidays").Columns(1).Find(i) On Error GoTo 0 'Überprüfen, ob es am angegebenen Datum Feiertag ist Wenn nicht RngFind nichts ist Then GoTo ForLast End If 'Überprüfen, ob es Samstag an einem bestimmten Datum ist If InclSaturdays Then If Weekday(i, 2) = 6 Then GoTo ForLast End If End If 'Überprüfen, ob es Sonntag an einem bestimmten Datum ist If InclSundays Then If Weekday(i, 2) = 7 Then GoTo ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End Function 

Wenn Ihnen dieser Blog gefallen hat, teilen Sie ihn mit Ihren Freunden auf Facebook. Außerdem können Sie uns auf Twitter und Facebook folgen.

Wir würden uns freuen, von Ihnen zu hören, lassen Sie uns wissen, wie wir unsere Arbeit verbessern und für Sie verbessern können. Schreiben Sie uns auf der E-Mail-Site