Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Feiertage in Kalender eintragen per VBA | Herbers Excel-Forum

Forumthread: Feiertage in Kalender eintragen per VBA

Feiertage in Kalender eintragen per VBA
15.01.2010 13:10:56
PeterO

Hallo!
Ich habe einen Jahresplaner gebastelt, bei dem ich momentan noch die Feitertage per Formel eintrage. Dies würde ich gern per VBA lösen, finde aber keinen Ansatz.
Der Kalender ist wie folgt aufgebaut:
A5=01.01.2010 / B5=freies Feld für Eintragungen / C5=01.02.2010 / D5=freie Zelle für Eintragungen / usw
A6=02.01.2010 / B6= '' / C6=02.02.2010 / D6= '' / usw
...
Die Feiertage stehen im Bereich AC5:AD18 in folgender Form:
AC5=01.01.2010 / AD5=Neujahr
...
Die Formel zum Eintragen der Termine in den Jahresplaner lautet wie folgt:
=WENN(ISTFEHLER(SVERWEIS(A5;$AC$5:$AD$18;2;0));"";SVERWEIS(A5;$AC$5:$AD$18;2;0))
Damit wird in B5 "Neujahr" eingetragen usw.
Ich möchte nun die Formel aus den Zeilen raushaben und suche daher eine Lösung per VBA. Diese sollte so gestaltet sein, dass zunächst automatisch die Feiertage eingetragen werden, wenn die Tabelle geöffnet/geändert wird. Trägt der User ein anderes Ereignis ein, dann soll dieses Vorrang haben (z.B. Eintrag in B6 "Aufräumen ;-)". Wird das Ereignis aber wieder gelöscht, dann soll wieder per VBA "Neujahr" eingetragen werden. > Ihr merkt, warum eine Formel eher unglück ist...<
Geht das? Kann mir einer helfen?
Gruß Peter

Anzeige

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Feiertage in Kalender eintragen per VBA
15.01.2010 13:14:14
Hajo_Zi
Hallo Peter,
Function Feiertag(Datum As Date) As String
Dim J%, D%
Dim O As Date
J = Year(Datum)
'Osterberechnung
D = (((255 - 11 * (J Mod 19)) - 21) Mod 30) + 21
O = DateSerial(J, 3, 1) + D + (D > 48) + 6 - _
((J + J \ 4 + D + (D > 48) + 1) Mod 7)
'Feiertage berechnen
Select Case Datum
Case Is = DateSerial(J, 1, 1)
Feiertag = "Neujahr"
Case Is = DateSerial(J, 1, 6)
Feiertag = "Dreikönig*"
Case Is = DateAdd("D", -2, O)
Feiertag = "Karfreitag"
Case Is = O
Feiertag = "Ostersonntag"
Case Is = DateAdd("D", 1, O)
Feiertag = "Ostermontag"
Case Is = DateSerial(J, 5, 1)
Feiertag = "Erster Mai"
Case Is = DateAdd("D", 39, O)
Feiertag = "Christi Himmelfahrt"
Case Is = DateAdd("D", 49, O)
Feiertag = "Pfingstsonntag"
Case Is = DateAdd("D", 50, O)
Feiertag = "Pfingstmontag"
Case Is = DateAdd("D", 60, O)
Feiertag = "Fronleichnam*"
Case Is = DateSerial(J, 8, 15)
Feiertag = "Maria Himmelfahrt*"
Case Is = DateSerial(J, 10, 3)
Feiertag = "Deutsche Einheit"
Case Is = DateSerial(J, 11, 22) - (DateSerial(J, 11, 18) Mod 7)
Feiertag = "Buß- und Bettag*"
Case Is = DateSerial(J, 10, 31)
Feiertag = "Reformationstag*"
Case Is = DateSerial(J, 11, 1)
Feiertag = "Allerheiligen*"
Case Is = DateSerial(J, 12, 24)
Feiertag = "Heilig Abend*"
Case Is = DateSerial(J, 12, 25)
Feiertag = "EWeihnacht"
Case Is = DateSerial(J, 12, 26)
Feiertag = "ZWeihnacht"
Case Is = DateSerial(J, 12, 31)
Feiertag = "Silvester*"
Case Else
Feiertag = ""
End Select
End Function

Anzeige
AW: Feiertage in Kalender eintragen per VBA
15.01.2010 13:32:50
PeterO
??????????????????????????????
AW: Feiertage in Kalender eintragen per VBA
15.01.2010 13:38:01
Hajo_Zi
Hallo Peter,
ein Kalender per VBA erstellen und dann keine Ahnung von Function?
Gruß Hajo
ich habe ...
15.01.2010 13:40:17
PeterO
den Kalender nicht per VBA erstellt. VBA hätte ich nur gern für das Eintragen der Feiertage
Peter
Anzeige
ok, aber dann
15.01.2010 13:45:58
PeterO
habe ich doch wieder eine Formel in der Zelle.
Ich möchte nun die Formel aus den Zeilen raushaben und suche daher eine Lösung per VBA. Diese sollte so gestaltet sein, dass zunächst automatisch die Feiertage eingetragen werden, wenn die Tabelle geöffnet/geändert wird. Trägt der User ein anderes Ereignis ein, dann soll dieses Vorrang haben (z.B. Eintrag in B6 "Aufräumen ;-)". Wird das Ereignis aber wieder gelöscht, dann soll wieder per VBA "Neujahr" eingetragen werden. > Ihr merkt, warum eine Formel eher unglück ist...< 
Oder irre ich?
Anzeige
AW: ok, aber dann
15.01.2010 13:50:23
Hajo_Zi
Hallo Pit,
es wäe einfach Klasse, wenn man den Beitrag auch lesen könnte.
Ich laufe hier nicht hin und her.
Gruß Hajo
AW: ok, aber dann
15.01.2010 13:51:30
Hajo_Zi
Hallo Peter,
Entschuldigung falscher Name.
Gruß Hajo
Anzeige
AW: ok, aber dann
15.01.2010 13:55:23
PeterO
is schon ok...
hier noch mal:
habe ich doch wieder eine Formel in der Zelle.
Ich möchte nun die Formel aus den Zeilen raushaben und suche daher eine Lösung per VBA. Diese sollte so gestaltet sein, dass zunächst automatisch die Feiertage eingetragen werden, wenn die Tabelle geöffnet/geändert wird. Trägt der User ein anderes Ereignis ein, dann soll dieses Vorrang haben (z.B. Eintrag in B6 "Aufräumen ;-)". Wird das Ereignis aber wieder gelöscht, dann soll wieder per VBA "Neujahr" eingetragen werden. > Ihr merkt, warum eine Formel eher unglück ist...<
Oder irre ich?

hing wohl mit dem zitieren zusammen...
Anzeige
AW: ok, aber dann
15.01.2010 14:01:48
Hajo_Zi
Hallo Peter,
sperre die Zelle doch, dan kann er die Formel nicht überschreiben werden. Das ist ein einmaliger Aufwand.
Für VBA muss es schon genau sein. Wir sehen Deine Datei nicht.
Gruß Hajo
Datei
15.01.2010 14:44:28
PeterO
so, hier meine Datei.

Die Datei https://www.herber.de/bbs/user/67244.xls wurde aus Datenschutzgründen gelöscht


Wie gesagt, sollen die Formen in den Spalten B, D, F etc. durch VBA ersetzt werden.
Anzeige
AW: Datei
15.01.2010 15:10:30
Hajo_Zi
Hallo Peter,
Du kannst das Makro zum Eintragen der Feiertage ausführen, falls nicht wird der Feiertag beim ersten Eintrag beim Feiertag gemacht. Makros müssen dazu aktiv sein.
https://www.herber.de/bbs/user/67247.xls
Gruß Hajo
Anzeige
sieht gut aus, aber
15.01.2010 15:40:39
PeterO
leider lassen sich die Einträge nciht überschreiben (es wird immer wieder der Feiertag eingetragen).
Der Ansatz von Hary war ganz gut. Ich denke, ich werde mir am Wochenende was daraus zusammenstricken.
Vielen Dank noch mal!
Peter
AW: sieht gut aus, aber
15.01.2010 15:47:45
Hajo_Zi
Hallo Peter,
dann ändere die Zeile.
If StWert <> "" And Target = "" Then Target = StWert
Gruß Hajo
Anzeige
AW: Feiertage in Kalender eintragen per VBA
15.01.2010 13:41:28
Luschi
Hallo Hajo,
da bei der Case-Auswertung immer nur ein konkreter Wert herauskommt, kann man auf 'Case Is =' _ verzichten und das Ganze so schreiben:

Case DateSerial(J, 1, 1)
Feiertag = "Neujahr"
Case DateSerial(J, 1, 6)
Feiertag = "Dreikönig*"
Case DateAdd("D", -2, O)
Feiertag = "Karfreitag"
Case DateSerial(J, 11, 22) - (DateSerial(J, 11, 18) Mod 7)
'usw.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Feiertage in Kalender eintragen per VBA
15.01.2010 13:31:53
Rudi Maintaire
Hallo,
Hajos Funktion in ein Modul
In DieseArbeitsmappe:
Private Sub Workbook_Open()
Dim lCol As Long, lRow As Long, sFT
Application.ScreenUpdating = False
With Sheets(1)
For lCol = 1 To 23 Step 2
lRow = 5
Do While .Cells(lRow, lCol) <> ""
If .Cells(lRow, lCol + 1) = "" Then
.Cells(lRow, lCol + 1) = Feiertag(.Cells(lRow, lCol))
End If
lRow = lRow + 1
Loop
Next
End With
Application.ScreenUpdating = True
End Sub

Gruß
Rudi
Anzeige
@ Hajo_Zi und Rudi Maintaire
15.01.2010 13:37:41
PeterO
ich versteh ehrlich gesagt nur Bahnhof!!
VBA-sehr bescheiden...
15.01.2010 13:49:23
robert
hi,
lies doch mal die erklärungen durch, da steht doch, wie es zu machen ist-oder?
gruß
robert
AW: Testmappe
15.01.2010 14:21:44
hary
hallo Peter
Teste mal die Mappe. Bei Neujahr kannst Du was reinschreiben. Loescht Du das erscheint wieder Neujahr.

Die Datei https://www.herber.de/bbs/user/67241.xls wurde aus Datenschutzgründen gelöscht


Gruss hary
der Code fuer Mitleser, vieleicht nicht schoen, aber selten;-)

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
If Target.Value = "" Then Cells(Target.Row, Target.Column) = WorksheetFunction.VLookup(Cells( _
Target.Row, 1), Range("AC5:AD18"), 2, 0)
End If
End Sub

Anzeige
AW: Testmappe
15.01.2010 14:58:04
PeterO
Hallo Hary,
sieht vom Grundsatz her gut aus, aber wenn ich ein 2. Ereignis eintrage, kommt der debugger
AW: Testmappe
15.01.2010 15:38:08
hary
hallo Peter
dann ersetz mal den Code in der tabelle, durch diesen

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
If WorksheetFunction.CountIf(Range("AC5:AC18"), Cells(Target.Row, 1)) <> 1 Then Exit Sub
If Target.Value = "" Then Cells(Target.Row, Target.Column) = WorksheetFunction.VLookup(Cells(_
Target.Row, 1), Range("AC5:AD18"), 2, 0)
End If
End Sub
gruss hary
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Feiertage automatisch in Excel-Kalender eintragen mit VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle einen neuen Kalender. Du kannst ein einfaches Format verwenden, wobei die Daten in den Spalten A, C, E usw. stehen und die freien Felder in den Spalten B, D, F usw. für die Feiertage reserviert sind.

  2. Erstelle eine Tabelle für die Feiertage im Bereich AC5:AD18, wobei in AC die Daten und in AD die Namen der Feiertage stehen.

    AC (Datum) AD (Feiertag)
    01.01.2010 Neujahr
    06.01.2010 Dreikönig
    ... ...
  3. Öffne den VBA-Editor (Alt + F11) und füge ein neues Modul hinzu.

  4. Füge die Funktion zur Berechnung der Feiertage ein. Kopiere den folgenden Code in das Modul:

    Function Feiertag(Datum As Date) As String
       Dim J%, D%
       Dim O As Date
       J = Year(Datum)
       ' Osterberechnung
       D = (((255 - 11 * (J Mod 19)) - 21) Mod 30) + 21
       O = DateSerial(J, 3, 1) + D + (D > 48) + 6 - _
       ((J + J \ 4 + D + (D > 48) + 1) Mod 7)
       ' Feiertage berechnen
       Select Case Datum
           Case Is = DateSerial(J, 1, 1)
               Feiertag = "Neujahr"
           Case Is = DateSerial(J, 1, 6)
               Feiertag = "Dreikönig*"
           ' ... weitere Feiertage hier hinzufügen
           Case Else
               Feiertag = ""
       End Select
    End Function
  5. Füge das Makro zum Eintragen der Feiertage in den Kalender ein. Kopiere den folgenden Code in das Modul „DieseArbeitsmappe“:

    Private Sub Workbook_Open()
       Dim lCol As Long, lRow As Long
       Application.ScreenUpdating = False
       With Sheets(1)
           For lCol = 1 To 23 Step 2
               lRow = 5
               Do While .Cells(lRow, lCol) <> ""
                   If .Cells(lRow, lCol + 1) = "" Then
                       .Cells(lRow, lCol + 1) = Feiertag(.Cells(lRow, lCol))
                   End If
                   lRow = lRow + 1
               Loop
           Next
       End With
       Application.ScreenUpdating = True
    End Sub
  6. Schließe den VBA-Editor und speichere die Datei als Makro-fähige Excel-Datei (.xlsm).

  7. Teste das Makro, indem du die Datei öffnest. Die Feiertage sollten automatisch in den Kalender eingetragen werden.


Häufige Fehler und Lösungen

  • Fehler: Feiertage werden nicht angezeigt.

    • Stelle sicher, dass die Makros in deinen Excel-Einstellungen aktiviert sind.
  • Fehler: Eintrag wird überschrieben.

    • Überprüfe den Code auf die Zeile, die für die Überprüfung der Eingabewerte verantwortlich ist. Möglicherweise musst du die Bedingungen für das Einfügen der Feiertage anpassen.

Alternative Methoden

  • Formeln verwenden: Du kannst auch Formeln wie =SVERWEIS(A5;AC5:AD18;2;FALSCH) nutzen, aber das ist weniger flexibel als VBA.

  • Feiertage manuell eintragen: Dies ist die einfachste, aber auch die zeitaufwendigste Methode, da du jeden Feiertag selbst eingeben musst.


Praktische Beispiele

  • Kalender 2010 mit Feiertagen: Erstelle einen Kalender für 2010 und benutze die oben genannten Schritte, um die Feiertage automatisch einzutragen.

  • Ferienkalender Excel: Du kannst eine ähnliche VBA-Funktion erstellen, um auch Ferientage in deinem Kalender anzuzeigen.


Tipps für Profis

  • Verwende benutzerdefinierte Funktionen: Erstelle komplexere Funktionen zur Berechnung von Feiertagen, die auch regionale Unterschiede berücksichtigen.

  • Optimierung der Leistung: Wenn du große Datenmengen hast, solltest du das Bildschirmaktualisieren deaktivieren, um die Ausführungsgeschwindigkeit zu erhöhen.


FAQ: Häufige Fragen

1. Wie kann ich Feiertage in Excel automatisch eintragen?
Nutze VBA, um eine Funktion zu erstellen, die beim Öffnen der Datei automatisch Feiertage in den Kalender einträgt.

2. Funktioniert das auch mit neueren Excel-Versionen?
Ja, die beschriebenen Methoden sind mit den meisten modernen Excel-Versionen kompatibel, einschließlich Excel 2010 und neuer.

3. Kann ich eigene Feiertage hinzufügen?
Ja, du kannst die Funktion Feiertag anpassen, um deine eigenen Feiertage zu berechnen und einzutragen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige