Arbeits- und andere Tage im Monat
Excel, alle Versionen
Für verschiedene Berufsgruppen kann es sinnvoll sein, bei einer Dienstplanerstellung rasch zu wissen, wie viele „normale” Arbeitstage (Montag bis Freitag), Samstage, Sonntage und vor allen Dingen Feiertage in einem bestimmten Monat sind. Das lässt sich zwar auch mit reinen Excel-Funktionen feststellen, aber solch eine Formel ist nicht wirklich transparent und verleitet vielleicht auch den einen oder anderen User dazu, in der Editierzeile „mal eben” eine Anpassung vorzunehmen, was nicht immer zum gewünschten Ziel führt. Oft ist die mühsam erarbeitete Formel dann zerstört.
Ich selber verwende da lieber VBA-Code. Eine benutzerdefinierte Funktion ist nicht so direkt im Zugriff eines Users und vom Prinzip her auch flexibler. Zugegeben, wer hier Anpassungen vornimmt, sollte den Code nicht nur lesen können sondern verstehen. Aber prinzipiell schreibe ich meine Programme (und Funktionen) so, dass sie verständlich sind, selbst dann, wenn ein Ablauf dadurch einige hundertstel Sekunden länger braucht.
In der beigefügten Musterdatei ist auch der Code enthalten. Einige kurze Hinweise zu der Nutzung dieser Funktion.
Beschreibung
Mit der Funktion xTage() wird berechnet, wie viele Werktage (Mo .. Fr) in einem Kalendermonat sind, gleichermaßen werden Samstage, Sonntage und Feiertage berechnet. Da es sich um eine benutzerdefinierte Funktion handelt, kann der Name der Funktion auch eigenen Wünschen angepasst werden.
Syntax
=xTage(Jahr; Monat; Typ)
Argument(e)
Das erste Argument Jahr verlangt ganz einfach nur eine Jahreszahl ohne weitere Angaben. Liegt für die Auswertung ein Datum zugrunde, kann die Jahreszahl mit der Excel-Funktion Jahr(Datum) berechnet werden. Der Wert sollte aus Sicherheitsgründen immer vierstellig sein.
Der Monat kann als Text oder Zahl eingegeben werden. Als Text sind die üblichen Abkürzungen „Jan”, „Feb”, „Mär”, … genau so akzeptabel wie die voll ausgeschriebenen Monatsnamen. Wenn Sie eine Zahl eingeben, liegt diese naturgemäß zwischen 1 und 12 und kann mit oder ohne Punkt verwendet werden.
Je nachdem welches Ergebnis Sie haben wollen, geben Sie an dritter Position den entsprechenden Parameter als Text (mit Anführungszeichen) ein. Möglich sind "Wt"
für den Wochentag, "Sa"
für den Samstag und "So"
für den Sonntag. Um die Anzahl der Feiertage in dem entsprechenden Monat zu berechnen, verwenden Sie "Ft"
als letztes Argument. Die Groß- Kleinschreibung spielt hierbei keine Rolle.
Wertung
Der 18.04.2014 war ein Freitag. Also muss der Tag als Wochentag gezählt werden. Oder doch nicht? Nein, es ist der Karfreitag gewesen und das ist ein Feiertag. Gleiches gilt natürlich auch für alle Feiertage, die als solche gewertet werden sollen. Es gilt, dass ein definierter Feiertag die höchste Priorität hat. Das ist wichtig, weil an Feiertagen vielfach mehr Zuschlag bezahlt wird als an „normalen” arbeitsfreien Tagen. Und es wird natürlich kein Tag doppelt gezählt.
Anwendung
In der Musterdatei sind für Monat und Jahr zwei getrennte Zellen verwendet worden, auf die dann in den einzelnen Auswertungszellen Bezug genommen wird. Natürlich kann die Funktion auch ohne diese Umgebung direkt mit Werten bestückt werden. Wollen Sie die Funktion in einer anderen Datei verwenden, dann müssen Sie den kompletten Code dort hin kopieren. Oder aber Sie erstellen ein Add-In, welches Sie dann nach den üblichen Regeln in allen Dateien verwenden können. Wollen Sie mit einem „normalen” Datum arbeiten, dass muss der Code dergestalt angepasst werden, dass die ArgumentenListe geändert oder ergänzt wird und aus diesem Datum der Monat und das Jahr extrahiert und dann weiter verwendet werden.
Der Code
Obwohl der Code sehr wenig kommentiert wurde, ist er gut lesbar und verständlich. Voraussetzung ist allerdings, dass Sie grundlegende Kenntnisse der Programmierung haben. Änderungen brauchen Sie nur dann vorzunehmen, wenn Sie regionale Feiertage wie beispielsweise den Rosenmontag oder auch Heiligabend und Silvester als Feiertag werten wollen.
Angenommen, Sie wollen die beiden genannten Tage im Dezember „aktivieren”, dann muss in der Funktion IstFeiertag() eine Zeile wieder aktiviert werden, also das Auslassungszeichen am Beginn der Zeile, der Kommentarmarker also muss entfernt werden:
Select Case Datum Case Ostern, Neujahr, Karfreitag, OsterMontag, TagDerArbeit, _ Himmelfahrt, Pfingsten, PfingstMontag, TagDerEinheit, _ Weihnacht1, Weihnacht2 IstFeiertag = True ' Falls 24.12. & 31.12. auch Feiertage, ' Kommentar-Marker in nächsten 2 Zeilen entfernen Case HeiligAbend, Silvester Feiertag = True ' Bei Bedarf noch weitere (regionale) Feiertage 'nach diesem Muster hinzufügen End Select
Bei Problemen oder Nachfragen stehen wir Ihnen gerne zur Verfügung.
Hinweis: Zwei weitere Beiträge, welche sich beide mit Urlaubs- und Projektplanung befassen, haben eine ähnliche Thematik: Jahreskalender (einfache Version ohne Makros) und Jahresplaner als komfortable Version mit Makros. Es werden ausschließlich an Arbeitstagen (ohne Feiertage) Markierungen für den Urlaub eingetragen.
Ein weiterer Beitrag (aus März 2015) erstellt eine Liste aller Wochenenden und Feiertage (per Hand und auch als Makro) und nutzt dazu die auch hier eingesetzte Funktion IstFeiertag().
[NachObenLetzte Verweis=„ML: xTage”]