Feiertage eingeben |
Letzte Änderung: 01.06.2009
Um unseren Kalender, dessen Erstellung wir auf den vorangegangenen Seiten erarbeitet haben, mit verschiedenen Terminen auf komfortable Art und Weise zu füllen, legen wir zunächst ein neues Tabellenblatt an. Diesem Blatt habe ich den Namen Termine gegeben. (Kann natürlich auch anders heißen).
Da die unterschiedlichen Terminarten eine unterschiedliche Bearbeitung erfordern, legen wir drei verschiedene Terminblöcke an. Was es damit auf sich hat, dazu kommen wir später. Grundsätzlich ist zu sagen, daß die folgenden Aktionen den Einsatz von VBA erfordern. Wer sich damit noch nicht beschäftigt hat, findet in der Abteilung Excel-Makros einige Grundlagen. Ich werde aber versuchen, das Erforderliche auch hier zu erklären.
Ein besonderes "Problem" stellen bewegliche Feiertage dar. Glücklicherweise hat der Mathematiker Gauss eine Formel entwickelt, mit der man diese Tage errechen kann. Auf der Basis dieser Formel gibt es einige Umsetzungen für den PC, eine davon habe ich auch verwendet.(Genau genommen wird damit der Ostersonntag berechnet, die anderen Feiertage haben einen festgelegten Abstand zum Ostersonntag).
Das ist die Formel:
Function bewFeiert(Jahr As Integer) As Date 'berechnet das Osterdatum (Sonntag) Dim D As Integer D = (((255 - 11 * (Jahr Mod 19)) - 21) Mod 30) + 21 bewFeiert = DateSerial(Jahr, 3, 1) + D + (D > 48) + 6 - ((Jahr + Jahr \ 4 + D + (D > 48) + 1) Mod 7) End Function |
Sie wird im Visual Basic-Editor eingefügt. Anschließend können wir die Funktion mit dem Funktions-Assistent unter Benutzerdefiniert aufrufen. Dazu selektieren wir auf dem Tabellenblatt Termine die Zelle A3 und klicken auf diesen Schalter:
Im Funktions-Assistent wählen wir die Funktion bewFeiert aus. Es öffnet sich ein neues Fenster:
Nun klicken wir im Tabellenblattregister auf den Reiter Kalender, es öffnet sich das Kalenderlatt. Dort selektieren wir die Zelle A1 und drücken Enter. Nun ist die Funktion bewFeiert mit dieser Zelle verknüpft. Wir haben eine 3D-Formel erzeugt.
Im Bild oben sehen wir das Ergebnis. Rechts oben die Formel der Funktion mit ihren Parametern. Das Datum ist der Termin vom Ostersonntag. Diese Formel muß für die anderen beweglichen Feiertage modifiziert werden. Wie sehen wir in der folgenden Tabelle:
Feiertag | Differenz zu Ostern | Formel |
---|---|---|
Rosenmontag | - 48 | =bewFeiert(Kalender!A1)-48 |
Fastnacht | - 47 | =bewFeiert(Kalender!A1)-47 |
Aschermittwoch | - 46 | =bewFeiert(Kalender!A1)-46 |
Karfreitag | - 2 | =bewFeiert(Kalender!A1)-2 |
Ostersonntag | =bewFeiert(Kalender!A1) | |
Ostermontag | + 1 | =bewFeiert(Kalender!A1)+1 |
Himmelfahrt | + 39 | =bewFeiert(Kalender!A1)+39 |
Pfingstsonntag | + 49 | =bewFeiert(Kalender!A1)+49 |
Pfingstmontag | + 50 | =bewFeiert(Kalender!A1)+50 |
Fronleichnam | + 60 | =bewFeiert(Kalender!A1)+60 |
Nachdem alle Formeln und Feiertage eingetragen sind, sollte das Ergebnis so aussehen:Termine
A | B | |
1 | Feiertage | |
2 | Datum | Feiertag |
3 | 23.02.2009 | Rosenmontag |
4 | 24.02.2009 | Fastnacht |
5 | 25.02.2009 | Aschermittwoch |
6 | 10.04.2009 | Karfreitag |
7 | 12.04.2009 | Ostersonntag |
8 | 13.04.2009 | Ostermontag |
9 | 21.05.2009 | Himmelfahrt |
10 | 31.05.2009 | Pfingstsonntag |
11 | 01.06.2009 | Pfingstmontag |
12 | 11.06.2009 | Fronleichnam |
13 | 01.01.2009 | Neujahr |
14 | 01.05.2009 | Tag der Arbeit |
15 | 03.10.2009 | Tag der dt. Einheit |
16 | 24.12.2009 | Heiliger Abend |
17 | 25.12.2009 | 1. Feiertag |
18 | 26.12.2009 | 2. Feiertag |
19 | 31.12.2009 | Silvester |
Formeln der Tabelle | ||||||||||||||||||||||||||||||||||||
|
In der unteren Darstellung sind die verwendeten Formeln erkennbar. Bitte auch die spezielle Formel für den Tag der deutschen Einheit beachten.
Grundsätzlich ist anzumerken, daß die Reihenfolge der Termine für das weitere Vorgehen keine Rolle spielt. Ich habe das nur zur besseren Übersicht in die kalendarische Reihenfolge gebracht. Die Termine passen sich nun automatisch an die Jahreszahl auf dem Kalenderblatt an.
Die Berechnung der beweglichen Feiertage in der Vorweihnachtszeit beschreibe ich auf einer gesonderten Seite.