Arbeits- (und andere) Tage im Monat

Arbeits- und andere Tage im Monat

Excel, alle Ver­sio­nen

Für ver­schiedene Beruf­s­grup­pen kann es sin­nvoll sein, bei ein­er Dien­st­plan­er­stel­lung rasch zu wis­sen, wie viele „nor­male” Arbeit­stage (Mon­tag bis Fre­itag), Sam­stage, Son­ntage und vor allen Din­gen Feiertage in einem bes­timmten Monat sind. Das lässt sich zwar auch mit reinen Excel-Funk­tio­nen fest­stellen, aber solch eine Formel ist nicht wirk­lich trans­par­ent und ver­leit­et vielle­icht auch den einen oder anderen User dazu, in der Edi­tierzeile „mal eben” eine Anpas­sung vorzunehmen, was nicht immer zum gewün­scht­en Ziel führt. Oft ist die müh­sam erar­beit­ete Formel dann zer­stört.

Ich sel­ber ver­wende da lieber VBA-Code. Eine benutzerdefinierte Funk­tion ist nicht so direkt im Zugriff eines Users und vom Prinzip her auch flex­i­bler. Zugegeben, wer hier Anpas­sun­gen vorn­immt, sollte den Code nicht nur lesen kön­nen son­dern ver­ste­hen. Aber prinzip­iell schreibe ich meine Pro­gramme (und Funk­tio­nen) so, dass sie ver­ständlich sind, selb­st dann, wenn ein Ablauf dadurch einige hun­dert­s­tel Sekun­den länger braucht.

In der beige­fügten Mus­ter­datei ist auch der Code enthal­ten. Einige kurze Hin­weise zu der Nutzung dieser Funk­tion.

▲ nach oben …

Beschreibung

Mit der Funk­tion xTage() wird berech­net, wie viele Werk­tage (Mo .. Fr) in einem Kalen­der­monat sind, gle­icher­maßen wer­den Sam­stage, Son­ntage und Feiertage berech­net. Da es sich um eine benutzerdefinierte Funk­tion han­delt, kann der Name der Funk­tion auch eige­nen Wün­schen angepasst wer­den.

▲ nach oben …

Syntax

=xTage(JahrMonatTyp)

Argument(e)

Das erste Argu­ment Jahr ver­langt ganz ein­fach nur eine Jahreszahl ohne weit­ere Anga­ben. Liegt für die Auswer­tung ein Datum zugrunde, kann die Jahreszahl mit der Excel-Funk­­tion Jahr(Datum) berech­net wer­den. Der Wert sollte aus Sicher­heits­grün­den immer vier­stel­lig sein.

Der Monat kann als Text oder Zahl eingegeben wer­den. Als Text sind die üblichen Ab­kür­zun­gen „Jan”, „Feb”, „Mär”, … genau so akzept­abel wie die voll aus­geschriebe­nen Monats­namen. Wenn Sie eine Zahl eingeben, liegt diese naturgemäß zwis­chen 1 und 12 und kann mit oder ohne Punkt ver­wen­det wer­den.

Je nach­dem welch­es Ergeb­nis Sie haben wollen, geben Sie an drit­ter Posi­tion den ent­spre­chenden Para­me­ter als Text (mit Anführungsze­ichen) ein. Möglich sind "Wt" für den Wochen­­tag, "Sa" für den Sam­stag und "So" für den Son­ntag. Um die Anzahl der Feier­tage in dem entsprechen­den Monat zu berech­nen, ver­wen­den Sie "Ft" als let­ztes Argu­ment. Die Groß- Klein­schrei­bung spielt hier­bei keine Rolle.

▲ nach oben …

Wertung

Der 18.04.2014 war ein Fre­itag. Also muss der Tag als Wochen­tag gezählt wer­den. Oder doch nicht? Nein, es ist der Kar­fre­itag gewe­sen und das ist ein Feiertag. Gle­ich­es gilt natür­lich auch für alle Feiertage, die als solche gew­ertet wer­den sollen. Es gilt, dass ein definiert­er Feiertag die höch­ste Pri­or­ität hat. Das ist wichtig, weil an Feierta­gen vielfach mehr Zuschlag bezahlt wird als an „nor­malen” arbeits­freien Tagen. Und es wird natür­lich kein Tag dop­pelt gezählt.

▲ nach oben …

Anwendung

In der Mus­ter­datei sind für Monat und Jahr zwei getren­nte Zellen ver­wen­det wor­den, auf die dann in den einzel­nen Auswer­tungszellen Bezug genom­men wird. Natür­lich kann die Funk­tion auch ohne diese Umge­bung direkt mit Werten bestückt wer­den. Wollen Sie die Funk­tion in ein­er anderen Datei ver­wen­den, dann müssen Sie den kom­plet­ten Code dort hin kopieren. Oder aber Sie erstellen ein Add-In, welch­es Sie dann nach den üblichen Regeln in allen Dateien ver­wen­den kön­nen. Wollen Sie mit einem „nor­malen” Datum arbeit­en, dass muss der Code dergestalt angepasst wer­den, dass die Argu­menten­Liste geän­dert oder ergänzt wird und aus diesem Datum der Monat und das Jahr extrahiert und dann weit­er ver­wen­det wer­den.

▲ nach oben …

Der Code

 Obwohl der Code sehr wenig kom­men­tiert wurde, ist er gut les­bar und ver­ständlich. Voraus­set­zung ist allerd­ings, dass Sie grundle­gende Ken­nt­nisse der Pro­gram­mierung haben. Änderun­gen brauchen Sie nur dann vorzunehmen, wenn Sie regionale Feiertage wie beispiel­sweise den Rosen­mon­tag oder auch Heili­ga­bend und Sil­vester als Feiertag werten wollen.

Angenom­men, Sie wollen die bei­den genan­nten Tage im Dezem­ber „aktivieren”, dann muss in der Funk­tion Ist­Feiertag() eine Zeile wieder aktiviert wer­den, also das Aus­las­sungsze­ichen am Beginn der Zeile, der Kom­men­tar­mark­er also muss ent­fer­nt wer­den:

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 Prob­le­men oder Nach­fra­gen ste­hen wir Ihnen gerne zur Ver­fü­gung.

Hin­weis: Zwei weit­ere Beiträge, welche sich bei­de mit Urlaubs- und Pro­jek­t­pla­nung befassen, haben eine ähn­liche The­matik: Jahreskalen­der (ein­fache Ver­sion ohne Makros) und Jahre­s­plan­er als kom­fort­able Ver­sion mit Makros. Es wer­den auss­chließlich an Arbeit­sta­gen (ohne Feiertage) Markierun­gen für den Urlaub einge­tra­gen.

Ein weit­er­er Beitrag (aus März 2015) erstellt eine Liste aller Woch­enen­den und Feiertage (per Hand und auch als Makro) und nutzt dazu die auch hier einge­set­zte Funk­tion Ist­Feiertag().

[NachOben­Let­zte Verweis=„ML: xTage”]
Dieser Beitrag wurde unter Datum und Zeit, Downloads, Mit VBA/Makro, Musterlösungen abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.