Zum Hauptinhalt springen

VBA Excel: Arbeitstage ohne Wochenende und Feiertage

Microsoft Excel – es ist ein leistungsfähiges Datenwerkzeug, mit dem Sie viele Aufgaben automatisieren können. VBA (Visual Basic für Applikationen) in Excel bietet Benutzern enorme Möglichkeiten, Makros und Programme zu erstellen, mit denen sie Daten verwalten und wiederholte Aktionen automatisieren können. In diesem Artikel erfahren Sie, wie Sie mit VBA die Anzahl der Arbeitstage ohne Wochenenden und Feiertage berechnen können.

Arbeitstage ohne Wochenende und Feiertage – dies sind wichtige Informationen für Unternehmen und Organisationen, die genau wissen möchten, wie viele Arbeitstage zwischen zwei Daten vergangen sind. Dies kann nützlich sein, um die Fristen für die Ausführung von Projekten zu berechnen oder die Dauer von Arbeitszeiten zu bestimmen.

In Excel haben wir eine NETWORKDAYS-Funktion, mit der Sie die Anzahl der Arbeitstage zwischen zwei Daten berechnen können, wobei Wochenenden und Feiertage berücksichtigt werden. In einigen Fällen ist es jedoch notwendig, die Anzahl der Arbeitstage ohne Berücksichtigung von Wochenenden und Feiertagen zu kennen. VBA wird uns dabei helfen.

Arbeitsfreie Tage in VBA Excel

In VBA (Visual Basic for Applications) können Sie ganz einfach die Berechnung von Arbeitstagen ohne Wochenenden und Feiertage implementieren. Dies kann nützlich sein, wenn Sie mit großen Datensätzen arbeiten oder wenn Sie die Arbeitstage für verschiedene Aufgaben automatisch berechnen möchten.

Zuerst müssen Sie eine Liste von Feiertagen und Wochenenden definieren. Sie können diese Liste in einem separaten Bereich von Zellen in Excel speichern oder im VBA-Code selbst erstellen. Sie können beispielsweise ein Array mit Feiertagen erstellen:

Dim holidays() As Dateholidays = Array(#1/1/2025#, #1/7/2025#, #2/23/2025#, #3/8/2025#)

Sie können dann eine Funktion schreiben, die das Startdatum und das Enddatum akzeptiert und die Anzahl der Arbeitstage dazwischen zurückgibt:

Function CountWorkdays(startDate As Date, endDate As Date) As IntegerDim workdays As IntegerDim currentDate As Dateworkdays = 0currentDate = startDateDo While currentDate vbSaturday And Weekday(currentDate) <> vbSunday ThenIf IsHoliday(currentDate) = False Thenworkdays = workdays + 1End IfEnd IfcurrentDate = currentDate + 1LoopCountWorkdays = workdaysEnd Function

Diese Funktion verwendet eine Do-While-Schleife, um alle Tage zwischen dem Start- und dem Enddatum zu durchlaufen. Für jeden Arbeitstag, der kein Wochenende oder Feiertag ist, wird der Workdays-Zähler erhöht. Die IsHoliday-Funktion überprüft, ob das aktuelle Datum ein Feiertag aus der Liste ist.

Um diese Funktion zu verwenden, können Sie sie über eine andere VBA-Prozedur oder direkt in einer Excel-Zelle mithilfe einer Formel aufrufen. Beispielsweise gibt die Formel =CountWorkdays(D4, E4) die Anzahl der Arbeitstage zwischen den Daten in den Zellen D4 und E4 zurück.

Auf diese Weise können Sie mit VBA in Excel problemlos die Berechnung von Arbeitstagen ohne Wochenenden und Feiertage implementieren. Dies kann nützlich sein, um verschiedene Aufgaben zu automatisieren oder mit großen Datenmengen zu arbeiten.

Wie man Feiertage in Excel-Tabellen berücksichtigt

Für den Anfang brauchen wir eine Liste der Feiertage. Sie können ein separates Arbeitsblatt in einer Excel-Arbeitsmappe erstellen, in dem die Feiertage angegeben werden, oder eine fertige Liste aus einer externen Datenquelle laden. In jedem Fall ist es wichtig, dass die Liste auf dem neuesten Stand ist und alle notwendigen Feiertage enthält.

Als nächstes können wir ein Makro in VBA schreiben, das überprüft, ob das aktuelle Datum ein Feiertag ist. Dazu können wir eine Schleife verwenden, die jedes Datum in der Feiertagsliste anzeigt und es mit dem aktuellen Datum vergleicht.

Sub CheckHolidays()Dim holidaysSheet As WorksheetDim holidayRange As RangeDim holiday As DateSet holidaysSheet = ThisWorkbook.Sheets("Holidays")' Перебираем все даты в столбце AFor Each holiday In holidaysSheet.Range("A2:A" & holidaysSheet.Cells(Rows.Count, 1).End(xlUp).Row)If Date = holiday Then' Если текущая дата совпадает с праздником, выводим сообщениеMsgBox "Сегодня праздник: " & holiday, vbInformationExit SubEnd IfNext holidayMsgBox "Сегодня рабочий день", vbInformationEnd Sub

In diesem Beispiel definieren wir das Arbeitsblatt "Feiertage", in dem sich die Liste der Feiertage befindet. Dann durchlaufen wir alle Daten in Spalte A und vergleichen sie mit dem aktuellen Datum. Wenn eine Übereinstimmung gefunden wird, wird eine Meldung angezeigt, dass heute ein Feiertag ist. Wenn keine Übereinstimmungen gefunden werden, wird eine Meldung angezeigt, die besagt, dass heute ein Arbeitstag ist.

Wenn ein Makro geschrieben und nach Feiertagen überprüft wird, kann es in Formeln oder anderen Makros verwendet werden, um die Feiertage in Excel-Tabellen zu berücksichtigen. Beispielsweise können Sie dieses Makro verwenden, um eine Formel zu erstellen, die die Anzahl der Arbeitstage zwischen zwei Daten berechnet, wobei Wochenenden und Feiertage ausgeschlossen sind.

Mit der Verwendung von VBA können wir also die Feiertage in Excel-Tabellen berücksichtigen, wodurch die Arbeit an Arbeitstagen genauer und bequemer wird.