einmal mehr eine Frage, die mich beschäftigt.
Mit Hilfe der folgenden Routine gelingt es mir ganz gut, Feiertage innerhalb eines Kalenderjahres in einem gesonderten Tabellenblatt ("Feiertage") darzustellen.
Option Explicit
Sub Ostersonntag()
On Error Resume Next
Dim intjahr As Integer
Dim BegDatum, y As Date
Dim x As Integer
Application.ScreenUpdating = False
BegDatum = Worksheets("Zeitdaten").Range("A1")
Worksheets("Zeitdaten").Select
Range("A37").Value = Format(Year(BegDatum), "0000")
intjahr = Worksheets("Zeitdaten").Range("A37")
x = (((255 - 11 * (intjahr Mod 19)) - 21) Mod 30) + 21
y = DateSerial(intjahr, 3, 1) + x + (x > 48) + 6 - ((intjahr + intjahr \ 4 + x + (x > 48) + 1) _
Mod 7)
Worksheets("Feiertage").Range("A1") = DateSerial(intjahr, 1, 1)
Worksheets("Feiertage").Range("A2") = y - 2
Worksheets("Feiertage").Range("A3") = y
Worksheets("Feiertage").Range("A4") = y + 1
Worksheets("Feiertage").Range("A5") = DateSerial(intjahr, 5, 1)
Worksheets("Feiertage").Range("A6") = y + 39
Worksheets("Feiertage").Range("A7") = y + 49
Worksheets("Feiertage").Range("A8") = y + 50
Worksheets("Feiertage").Range("A9") = y + 60
Worksheets("Feiertage").Range("A10") = DateSerial(intjahr, 10, 3)
Worksheets("Feiertage").Range("A11") = DateSerial(intjahr, 11, 1)
Worksheets("Feiertage").Range("A12") = DateSerial(intjahr, 12, 25)
Worksheets("Feiertage").Range("A13") = DateSerial(intjahr, 12, 26)
Worksheets("Feiertage").Range("A15") = y - 48
Worksheets("Feiertage").Range("A16") = DateSerial(intjahr, 12, 24)
Worksheets("Feiertage").Range("A17") = DateSerial(intjahr, 12, 31)
Worksheets("Feiertage").Range("B1") = "Neujahr"
Worksheets("Feiertage").Range("B2") = "Karfreitag"
Worksheets("Feiertage").Range("B3") = "Ostersonntag"
Worksheets("Feiertage").Range("B4") = "Ostermontag"
Worksheets("Feiertage").Range("B5") = "Maifeiertag"
Worksheets("Feiertage").Range("B6") = "Christi Himmelfahrt"
Worksheets("Feiertage").Range("B7") = "Pfingstsonntag"
Worksheets("Feiertage").Range("B8") = "Pfingstmontag"
Worksheets("Feiertage").Range("B9") = "Fronleichnam"
Worksheets("Feiertage").Range("B10") = "Tag der deutschen Einheit"
Worksheets("Feiertage").Range("B11") = "Allerheiligen"
Worksheets("Feiertage").Range("B12") = "1. Weihnachtstag"
Worksheets("Feiertage").Range("B13") = "2. Weihnachtstag"
Worksheets("Feiertage").Range("B15") = "Rosenmontag"
Worksheets("Feiertage").Range("B16") = "Heiligabend"
Worksheets("Feiertage").Range("B17") = "Sylvester"
Application.ScreenUpdating = True
End Sub
Mit Hilfe dieser Daten "vergleiche" ich nur innerhalb einer anderen Routine, ob denn ein Datum des aktuellen Monats (Zellen "A5:A35" des Arbeitsblattes "Abrechnung") mit einem dieser Daten im Blatt "Feiertage" identisch ist. Wenn ja, kopiere ich Daten aus Zellen "D5:D35" in "Z5:Z35". Wie gesagt, so weit "passt" das.
Nur habe ich irgendwie den Eindruck, das diese Vorgehensweise vereinfacht werden kann/soll. Hierbei würde ich gerne auf dieses zusätzliche Tabellenblatt ("Feiertage") verzichten und den Vergleich, ob den Feiertage im aktuellen Monat anfallen, direkt im Modul erledigen. Wenn wirklich Feiertage anfallen, sollen denn die Daten aus "D5:D35" direkt in "Z5:Z35" kopiert werden.
Keine Ahnung, wie das gehen soll. Hat den wer von Euch dazu ne Idee? Einmal mehr nur via VBA
Besten Dank für Eure Überlegungen.
Gruß
Uwe