Nur Wochenenden und Feiertage

Nur Sa, So und Feiertage in eine Liste eintragen

 Wohl kaum jemand reißt sich um einen Dienst an Woch­enen­den oder Feierta­gen. Aber in manchen Berufen ist es ein­fach erforder­lich. Und um das einiger­maßen gerecht zu verteilen, bietet sich eine Liste an, in welch­er nur diese Tage aufge­führt sind. In A1 soll entwed­er das Jahr als Zahl oder das Datum des 1.Januar des entsprechen­den Jahres ste­hen, for­matiert als JJJJ. Begin­nend in A3 der 1.1. (es ist ja in jedem Fall ein Feiertag) und darunter jew­eils die Woch­enen­den und die weit­eren Feiertage für das restliche Jahr.

Das Ganze geht natür­lich von Hand, also mit reinen Excel-Bor­d­mit­teln ohne Pro­gram­mierung. Unser Vorschlag dazu sieht so aus:

  • Tra­gen Sie in A1 die Jahreszahl oder das Datum ein.
  • In A3 kommt auf jeden Fall das Datum des 1. Jan­u­ar.
  • Falls der Jahres­be­ginn auf einen Sam­stag fällt, gehört in A4 der 2. Jan­u­ar, weil es ja ein Son­ntag ist. Anson­sten kommt in A4 der kom­mende Sam­stag.
  • Und in A5 kommt entwed­er der Son­ntag nach dem Jahres­be­ginn oder erst ein­mal gar nichts.

Jet­zt ste­hen entwed­er in A3:A4 oder in A4:A5 der erste Sam­stag und Son­ntag des Jahres. In jedem Fall gehört in die näch­ste freie Zelle (z.B. F5) die Formel mit einem Ver­weis auf den darüber ste­hen­den Sam­stag, beispiel­sweise =F4+7. In die fol­gende Zeile kommt dann der Ver­weis auf die darüber liegende Zeile, also beispiel­sweise =F5+7. Diese let­zte Zeile kön­nen Sie nun so weit nach unten ziehen, bis das Jahre­sende erre­icht ist. Anschließend tra­gen Sie von Hand alle Feiertage des Jahres ein oder lassen Sie sich diese berech­nen, wie hier als Muster vorgestellt. Zum Schluss sortieren Sie den Bere­ich mit den kalen­darischen Dat­en, damit die Feiertage an die kor­rek­te Posi­tion  kom­men. Das hört sich gewiss schwieriger an, als es ist. Aber es bedeutet Aufwand.

Prinzip­iell kom­plett anders läuft das, wenn Sie das ganze per VBA erledi­gen lassen. Sie tra­gen auch in A1 das Datum oder das Jahr ein und dann rufen Sie (beispiel­sweise) in dieser Datei das einzig vorhan­dene Makro Nur­Woch­enen­de­Und­Feiertage beispiel­sweise  mit auf. AltF8 auf. Alter­na­tiv haben Sie es selb­st in Ihre Datei einge­fügt, der Code ste­ht dann im Mod­ul DieseAr­beitsmappe. Ruck zuck wird nach dem Aufruf im aktuellen Blatt ab Zelle A3 jedes Woch­enende einge­tra­gen und auch gle­ich in kor­rek­ter zeitlich­er Rei­hen­folge die Feiertage des Jahres.

Einige Anmerkun­gen sind hier sehr wichtig. Eine Schleife ist sel­ten die schnell­ste und damit auch so gut wie nie die beste Möglichkeit, hier aber ist sie der Ein­fach­heit und der Trans­parenz des Codes geschuldet. Und bei diesen weni­gen Durch­läufen, es sind ja höch­stens 366 Tage, ist die etwas gerin­gere Geschwindigkeit nicht spür­bar. Sehen Sie sel­ber den Code:

Option Explicit

Sub NurWochenendeUndFeiertage()
   Dim fDay As Date, lDay As Date
   Dim Jahr As Integer, Tag As Date
   Dim Zeile As Integer
   
   On Error GoTo ErrorHandler
   Application.ScreenUpdating = False
   With ActiveSheet
      If IsDate(Cells(1, 1)) Then
         Jahr = Year(Cells(1, 1))
      Else
         Jahr = Cells(1, 1)
      End If
      
      fDay = DateSerial(Jahr, 1, 1)
      lDay = DateSerial(Jahr, 12, 31)
      Zeile = 3
      For Tag = fDay To lDay
         If Weekday(Tag, 2) > 5 Or IstFeiertag(Tag) Then
            Cells(Zeile, 1) = CDate(Tag)
'            If IstFeiertag(Tag) Then
'                With Cells(Zeile, 1).Font
'                  .Color = -11489280
'                  .Bold = True
'               End With
'            End If
            Zeile = Zeile + 1
         End If
      Next Tag
   End With
   
ErrorHandler:
   Application.ScreenUpdating = True
End Sub

Und einige weit­ere kurze Erk­lärun­gen dazu: Die Bild­schir­mak­tu­al­isierung wird aus Grün­den der Geschwindigkeit und zur Ver­mei­dung eines flim­mern­den Bild­schirms aus­geschal­tet. Danach wird der Vari­ablen Jahr die Jahreszahl zugewiesen. Nach­dem der Zeit­bere­ich mit fDay und lDay (first­Day und last­Day) fest gelegt wor­den ist, wird für jeden Tag des Jahres geprüft, ob es ein Woch­enende oder ein Feiertag ist. Wenn dieses der Fall ist, wird der Wert in die entsprechende Zeile geschrieben.

Der fol­gende Block ist erst ein­mal auskom­men­tiert. Wenn Sie diese Zeilen aktivieren, dann wird automa­tisch ein Feiertag in grün­er Schrift und der For­matierung „Fett” dargestellt. – Die Funk­tion Ist­Feiertag() ist kein Teil des Excel son­dern eine selb­st definierte Funk­tion, welche im Modul1 abgelegt ist. Hier wer­den Sie bei Bedarf den einen oder anderen Feiertag aktivieren oder deak­tivieren. Der Code sollte so trans­par­ent sein, dass auch bei geringer Grund­ken­nt­nis die Änderun­gen vorgenom­men wer­den kön­nen. Falls Sie nicht auf die hier ange­botene Datei zurück greifen und den Code selb­st ein­fü­gen wollen, dann wer­den Sie in diesem Beitrag fündig.

Für bei­de Ver­sio­nen ist es nun möglich, mit­tels bed­ingter For­matierung die Feiertage nach eigen­em Geschmack her­vorzuheben. Das hat den Vorteil, dass Sie ein­er­seits die Gestal­tung selb­st bes­tim­men kön­nen und andr­er­seits genügt es, in A1 das Jahr zu ändern, und automa­tisch wer­den die Feiertage kor­rekt markiert.

Etwas anders läuft das, wenn Sie die For­matierung durch den Code fes­tle­gen. Dann ist es dur­chaus wahrschein­lich, dass die bish­erige For­matierung in der Zelle verbleibt und nun auch nor­male Woch­enen­den far­blich her­vorge­hoben wer­den. Der Vorteil der per Code erzeugten For­matierung liegt darin, dass kein unbe­darfter User „verse­hentlich” Änderun­gen daran vorn­immt. Manche Leute haben ja einen far­blichen Geschmack, dass die Kol­le­gen Augenkrebs davon bekom­men. 😈

Bei einem neuen Jahr wäre es bei dieser Form der For­matierung am ein­fach­sten, die gesamten Zeilen ab dem 1. Jan­u­ar zu löschen und dann per Makro neu auf­bauen zu lassen. Oder Sie bauen das (auch wegen der Schalt­jahre) fest in die Rou­tine (Sub) mit ein.

▲ nach oben …

Rück­mel­dun­gen / Feed­back gerne per Mail an mich (G.Mumme@Excel-ist-sexy.de)

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrer­seits z.B. 2,00  freuen … (← Klick mich!)

 

Dieser Beitrag wurde unter Datum und Zeit, Mit VBA/Makro, Musterlösungen, Ohne Makro/VBA, Tabelle und Zelle, Verschiedenes abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.