Arbeits- (und andere) Tage im Monat

Ar­beits- und an­de­re Tage im Mo­nat

Ex­cel, 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 vie­le „nor­male” Arbeit­stage (Mon­tag bis Fre­itag), Sam­stage, Son­ntage und vor al­len Din­gen Fei­er­ta­ge in ei­nem bes­timmten Mo­nat sind. Das lässt sich zwar auch mit rei­nen Excel-Funk­tio­nen fest­stellen, aber solch eine For­mel ist nicht wirk­lich trans­par­ent und ver­leit­et vielle­icht auch den ei­nen oder an­de­ren User dazu, in der Edi­tierzeile „mal eben” eine Anpas­sung vor­zu­neh­men, was nicht im­mer zum gewün­scht­en Ziel führt. Oft ist die müh­sam erar­beit­ete For­mel dann zer­stört.

Ich sel­ber ver­wende da lie­ber VBA-Code. Eine be­nut­zer­de­fi­nier­te Funk­tion ist nicht so di­rekt im Zu­griff ei­nes Users und vom Prin­zip her auch flex­i­bler. Zu­ge­ge­ben, wer hier Anpas­sun­gen vorn­immt, soll­te den Code nicht nur le­sen kön­nen son­dern ver­ste­hen. Aber prinzip­iell schrei­be ich mei­ne Pro­gramme (und Funk­tio­nen) so, dass sie ver­ständlich sind, selb­st dann, wenn ein Ab­lauf da­durch ei­ni­ge hun­dert­s­tel Sekun­den län­ger braucht.

In der beige­fügten Mus­ter­datei ist auch der Code enthal­ten. Ei­ni­ge kur­ze Hin­weise zu der Nut­zung die­ser Funk­tion.

▲ nach oben …

Be­schrei­bung

Mit der Funk­tion xTa­ge() wird berech­net, wie vie­le Werk­tage (Mo .. Fr) in ei­nem Kalen­der­monat sind, gle­icher­maßen wer­den Sam­stage, Son­ntage und Fei­er­ta­ge berech­net. Da es sich um eine be­nut­zer­de­fi­nier­te Funk­tion han­delt, kann der Name der Funk­tion auch eige­nen Wün­schen an­ge­passt wer­den.

▲ nach oben …

Syn­tax

=xTa­ge(JahrMo­natTyp)

Ar­gu­ment(e)

Das ers­te Argu­ment Jahr ver­langt ganz ein­fach nur eine Jah­res­zahl ohne weit­ere Anga­ben. Liegt für die Auswer­tung ein Da­tum zu­grun­de, kann die Jah­res­zahl mit der Excel-Funk­­tion Jahr(Da­tum) berech­net wer­den. Der Wert soll­te aus Sicher­heits­grün­den im­mer vier­stel­lig sein.

Der Mo­nat kann als Text oder Zahl ein­ge­ge­ben wer­den. Als Text sind die üb­li­chen Ab­kür­zun­gen „Jan”, „Feb”, „Mär”, … ge­nau so akzept­abel wie die voll aus­geschriebe­nen Monats­namen. Wenn Sie eine Zahl ein­ge­ben, liegt die­se na­tur­ge­mäß zwis­chen 1 und 12 und kann mit oder ohne Punkt ver­wen­det wer­den.

Je nach­dem welch­es Ergeb­nis Sie ha­ben wol­len, ge­ben Sie an drit­ter Posi­tion den ent­spre­chenden Para­me­ter als Text (mit Anführungsze­ichen) ein. Mög­lich sind "Wt" für den Wochen­­tag, "Sa" für den Sam­stag und "So" für den Son­ntag. Um die An­zahl der Feier­tage in dem entsprechen­den Mo­nat zu berech­nen, ver­wen­den Sie "Ft" als let­ztes Argu­ment. Die Groß- Klein­schrei­bung spielt hier­bei kei­ne Rol­le.

▲ nach oben …

Wer­tung

Der 18.04.2014 war ein Fre­itag. Also muss der Tag als Wochen­tag ge­zählt wer­den. Oder doch nicht? Nein, es ist der Kar­fre­itag gewe­sen und das ist ein Fei­er­tag. Gle­ich­es gilt natür­lich auch für alle Fei­er­ta­ge, die als sol­che gew­ertet wer­den sol­len. Es gilt, dass ein definiert­er Fei­er­tag die höch­ste Pri­or­ität hat. Das ist wich­tig, weil an Feierta­gen viel­fach mehr Zu­schlag be­zahlt wird als an „nor­malen” arbeits­freien Ta­gen. Und es wird natür­lich kein Tag dop­pelt ge­zählt.

▲ nach oben …

An­wen­dung

In der Mus­ter­datei sind für Mo­nat und Jahr zwei getren­nte Zel­len ver­wen­det wor­den, auf die dann in den einzel­nen Auswer­tungszellen Be­zug genom­men wird. Natür­lich kann die Funk­tion auch ohne die­se Umge­bung di­rekt mit Wer­ten be­stückt wer­den. Wol­len Sie die Funk­tion in ein­er an­de­ren Da­tei ver­wen­den, dann müs­sen Sie den kom­plet­ten Code dort hin ko­pie­ren. Oder aber Sie er­stel­len ein Add-In, welch­es Sie dann nach den üb­li­chen Re­geln in al­len Da­tei­en ver­wen­den kön­nen. Wol­len Sie mit ei­nem „nor­malen” Da­tum arbeit­en, dass muss der Code der­ge­stalt an­ge­passt wer­den, dass die Argu­menten­Lis­te geän­dert oder er­gänzt wird und aus die­sem Da­tum der Mo­nat und das Jahr ex­tra­hiert und dann weit­er ver­wen­det wer­den.

▲ nach oben …

Der Code

 Ob­wohl der Code sehr we­nig kom­men­tiert wur­de, 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 ha­ben. Änderun­gen brau­chen Sie nur dann vor­zu­neh­men, wenn Sie re­gio­na­le Fei­er­ta­ge wie beispiel­sweise den Rosen­mon­tag oder auch Heili­ga­bend und Sil­vester als Fei­er­tag wer­ten wol­len.

Angenom­men, Sie wol­len die bei­den genan­nten Tage im Dezem­ber „ak­ti­vie­ren”, dann muss in der Funk­tion Ist­Feiertag() eine Zei­le wie­der ak­ti­viert wer­den, also das Aus­las­sungsze­ichen am Be­ginn der Zei­le, 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 Ih­nen ger­ne zur Ver­fü­gung.

Hin­weis: Zwei weit­ere Bei­trä­ge, wel­che sich bei­de mit Ur­laubs- und Pro­jek­t­pla­nung be­fas­sen, ha­ben eine ähn­liche The­matik: Jahreskalen­der (ein­fache Ver­sion ohne Ma­kros) und Jahre­s­plan­er als kom­fort­able Ver­sion mit Ma­kros. Es wer­den auss­chließlich an Arbeit­sta­gen (ohne Fei­er­ta­ge) Markierun­gen für den Ur­laub einge­tra­gen.

Ein weit­er­er Bei­trag (aus März 2015) er­stellt eine Lis­te al­ler Woch­enen­den und Fei­er­ta­ge (per Hand und auch als Ma­kro) und nutzt dazu die auch hier einge­set­zte Funk­tion Ist­Feiertag().

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