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

Ostern im Tipp 0502 Jahreskalender

Forumthread: Ostern im Tipp 0502 Jahreskalender

Ostern im Tipp 0502 Jahreskalender
Peterchen
Hallo,
ich habe mir gerade den Tipp 0502 angeschaut mit einem Jahreskalender.
In der Tabelle Feiertage steht in Zelle A4 =Ostern
Nun habe ich in der Datei diese Funktion Ostern gesucht aber ich kann sie nicht finden.
Wo ist die Osterberechnung versteckt in dem Tipp ? Oder wie funktioniert sie?
Wenn man das einfach so schreibt kommt ja unbekannter Name als Fehler.
Irgendwo muss doch die Funktion Ostern herkommen?
Ich habe den Tipp von Damals noch mal wieder hoch geladen unter:
https://www.herber.de/bbs/user/64547.xls
Fuchst mich ziemlich das ich nicht erkennen kann wie das gemacht ist,
und ich könnte es gut gebrauchen für einen ähnlichen Kalender.
Gruß Peter
Anzeige
AW: Ostern im Tipp 0502 Jahreskalender
Peterchen
Hallo Hajo,
ich habe doch den Link zu der Datei die ich hoch geladen habe geschrieben.
https://www.herber.de/bbs/user/64547.xls
Das ist Tipp_0502.
Der Link zu den Formeln ist aber auch schon eine Hilfe,
obwohl ich jetzt echt gerne begreifen würde wie das in der Datei funktioniert. *smile*
Gruß Peter
Anzeige
AW: Ostern im Tipp 0502 Jahreskalender
Hajo_Zi
Hallo Peter,
das hatte ich nicht so aus dem Beitrag gelesen. Ich hätte vermutet es gibt ein Tipp 502 und Du hast eine von Dir erstellte Datei angehängt. Das muss ja nicht unbedingt sein das die mit dem Tipp 502 übereinstimmt.
Gruß Hajo
Anzeige
AW: Ostern im Tipp 0502 Jahreskalender
Peterchen
Hallo Hajo,
die Datei ist nicht von mir erstellt. Dann wüste ich ja wo "=Ostern" her kommt ;-)
Das ist wie ich schon schrieb der Tipp_0502 den ich noch mal hoch geladen habe.
Gruß Peter
AW: Ostern im Tipp 0502 Jahreskalender
Peterchen
Hallo nochmal ;-)
hab mich über die Osterberechnung nach Gauss noch etwas aufgeschlaut und muss mal anmerken das die auch nicht perfekt ist, wie der Abschnitt "2. Lösung nach Gauss (perfekt" vermuten lässt.
Siehe:
http://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel#Gegen.C3.BCberstellung_Gau.C3.9F_.E2.80.93_Lichtenberg
Ich habe jetzt die Berechnung nach Lichtenberg als Funktion eingebaut.
Ab der Ostergrenze nutze ich aber die fertigen Funktionen um den Sonntag zu errechnen.
Public Function Ostern(ByVal y As Integer) As Date
Dim k As Integer  'Säkularzahl
Dim m As Integer  'säkulare Mondschaltung
Dim a As Integer  'Mondparameter
Dim d As Integer  'Keim für den ersten Vollmond im Frühling
Dim r As Integer  'kalendarische Korrekturgröße
Dim og As Date    'Ostergrenze
' Berechnung nach Lichtenberg ohne Ausnahmen wie bei Gauss
k = y \ 100                                   'Säkularzahl
m = 15 + (3 * k + 3) \ 4 - (8 * k + 13) \ 25  'säkulare Mondschaltung
a = y Mod 19                                  'Mondparameter
d = (19 * a + m) Mod 30                       'Keim für den ersten Vollmond im Frühling
r = d \ 29 + (d \ 28 - d \ 29) * (a \ 11)     'kalendarische Korrekturgröße
og = DateSerial(y, 3, 21 + d - r)             'Ostergrenze
Ostern = og_d + 7 - Weekday(og_d, vbMonday)   'erster Sonntag ab der Ostergrenze
'Das ermittelte Datum ergiebt weitere Feiertage wie folgt:
' Altweiber = Ostern - 52
' Rosenmontag = Ostern - 48
' Karfreitag = Ostern -2
' Ostermontag = Ostern + 1
' Himmelfahrt = Ostern + 39
' Pfingstsonntag = Ostern + 49
' Pfingstmontag = Ostern + 50
' Fronleichnam = = Ostern + 60
End Function

Klappt prima, auch bei Gauss-Ausnahme-Jahren wie 1954 und 1981.
Gruß Peter
Anzeige
deine Funktion rechnet falsch
Josef
Hallo Peter,
zB. 1994 und 2011
Gruß Sepp

AW: stimmt da ist ein fehler
Peterchen
Hi Sepp,
hab ich auch schon bemerkt.
Leider rechen die Gauss Berechnung ohne Ausnahmen zb bei 1981,
und die hier oft benutzte Kurzform zb. ab 2100, auch nicht richtig.
Muss noch mal schauen wie es ohne Ausnahmen richtig wird,
oder die Ausnahmen halt erkennen und korrigieren.
Gruß Peter
Anzeige
AW: stimmt da ist ein fehler
Josef
Hallo Peter,
teste mal.
Public Function EasterDate(ByVal Year As Integer) As Date
  Dim k As Integer, m As Integer, s As Integer, a As Integer
  Dim d As Integer, r As Integer, og As Integer, sz As Integer
  Dim oe As Integer
  
  k = Int(Year / 100)
  m = 15 + Int((3 * k + 3) / 4) - Int((8 * k + 13) / 25)
  s = 2 - Int((3 * k + 3) / 4)
  a = Year Mod 19
  d = (19 * a + m) Mod 30
  r = Int(d / 29) + (Int(d / 28) - Int(d / 29)) * Int(a / 11)
  og = 21 + d - r
  sz = 7 - ((Year + Int(Year / 4) + s) Mod 7)
  oe = 7 - ((og - sz) Mod 7)
  
  EasterDate = DateSerial(Year, 3, og + oe)
  
End Function

Gruß Sepp

Anzeige
ich verwende diese...
Tino
Hallo,
Function Ostern(LJahr As Long) As Date
Dim X As Long
    X = (((255 - 11 * (LJahr Mod 19)) - 21) Mod 30) + 21
    Osetrn = DateSerial(LJahr, 3, 1) + X + (X > 48) + 6 - ((LJahr + LJahr \ 4 + X + (X > 48) + 1) Mod 7)
End Function
Ist nicht von mir, habe ich irgendwann mal im Internet gefunden.
Gruß Tino
Anzeige
AW: ich verwende diese...
Josef
Hallo Tino,
diese Funktion verwende ich normalerweise auch, Peter wollte aber wegen der angeblichen ungenauigkeit
der Gauß-Lösung, die Lichtenberg-Lösung verwenden.
Gruß Sepp

ok. oT.
Tino
AW: ich verwende diese...
Peterchen
Hi,
ja die geht auch in unseren Jahren problemlos. Und mit den Vergleichern (X &gt 48) sind die Ungenauigkeiten der Gauss Formel ja wieder behoben.
Aber durch die ungenaue Schaltjahrkorrektur LJahr + LJahr \ 4, so wie die festen Größe von M und N durch das starke kürzen, kann man die nur für die Jahre 1901 bis 2099 Gebrauch was normal aber reicht.
Aber außerhalb der Zeitspanne muss das Schaltjahr mit - LJahr \ 100 + LJahr \ 400 ergänzt und müssen die Faktoren M und N, die ganz weg gekürzt sind, wieder richtig errechnet werden.
Gruß Peter
Anzeige
AW: ich verwende diese...
Klaus
Hallo Forum,
ich habe noch einmal eine Frage zum Osterdatum:
Ist es möglich eine Funktion Osterdatum zu schreiben, die das Problem
der 1904-Datumswerte mit berücksichtigt? Hintergrund: auf den Macs z.B. ist
in den Voreinstellungen standardmäßig 1904 aktiviert (warum, weis nur Bill).
In Kladde gesprochen: wenn 1904 aktiviert dann Osterformel minus 4 (oder so).
Gruß
Klaus
Anzeige
AW: ich verwende diese...
Klaus
… ups – und mein Level war falsch eingestellt (keine Ahnung warum).
Richtig ist: Excel gut - Vba geht so ...
Gruß
Klaus
ich hoffe es stimmt so...
Tino
Hallo,
Daten vor 1900 werden als Text angezeigt.
Zellen auf Datum Formatieren.
Kommt in ein Modul
Function Ostern(LJahr As Long) As Variant
Dim Wert As Variant, X As Long, y As Long, z As Long

X = Int(LJahr / 100)
y = (19 * (LJahr Mod 19) + X - Int(X / 4) - Int((X - Int((X + 8) / 25) + 1) / 3) + 15) Mod 30
z = (32 + 2 * (X Mod 4) + 2 * Int((LJahr Mod 100) / 4) - y - ((LJahr Mod 100) Mod 4)) Mod 7

Wert = y + z - 7 * Int(((LJahr Mod 19) + 11 * y + 22 * z) / 451) + 22
Wert = Format(IIf(Wert - 31 < 1, Wert, Wert - 31), "00") & "." & IIf(Wert > 31, "04.", "03.") & LJahr

If LJahr < 1900 Then
 Ostern = Wert
Else
 Ostern = DateValue(Wert)
End If

End Function
In Excel kann es wie eine Formel verwendet werden.
 ABC
2JahrOstern 
3180013.04.1800als Text
4185031.03.1850als Text
5190016.04.1904 
6195010.04.1954 
7200024.04.2004 
8200116.04.2005 
9200201.04.2006 
10200321.04.2007 
11200412.04.2008 
12200528.03.2009 
13200617.04.2010 
14200709.04.2011 
15200824.03.2012 
16200913.04.2013 
17201005.04.2014 
18201125.04.2015 
19201209.04.2016 
20201301.04.2017 

Formeln der Tabelle
ZelleFormel
B3=Ostern(A3)
B4=Ostern(A4)
B5=Ostern(A5)
B6=Ostern(A6)
B7=Ostern(A7)
B8=Ostern(A8)
B9=Ostern(A9)
B10=Ostern(A10)
B11=Ostern(A11)
B12=Ostern(A12)
B13=Ostern(A13)
B14=Ostern(A14)
B15=Ostern(A15)
B16=Ostern(A16)
B17=Ostern(A17)
B18=Ostern(A18)
B19=Ostern(A19)
B20=Ostern(A20)

Gruß Tino
Anzeige
muss natürlich
Tino
Hallo,
If LJahr < 1904 Then
sein und unter 1904 wird als Text angezeigt.
Function Ostern(LJahr As Long) As Variant
Dim Wert As Variant, X As Long, y As Long, z As Long

X = Int(LJahr / 100)
y = (19 * (LJahr Mod 19) + X - Int(X / 4) - Int((X - Int((X + 8) / 25) + 1) / 3) + 15) Mod 30
z = (32 + 2 * (X Mod 4) + 2 * Int((LJahr Mod 100) / 4) - y - ((LJahr Mod 100) Mod 4)) Mod 7

Wert = y + z - 7 * Int(((LJahr Mod 19) + 11 * y + 22 * z) / 451) + 22
Wert = Format(IIf(Wert - 31 < 1, Wert, Wert - 31), "00") & "." & IIf(Wert > 31, "04.", "03.") & LJahr

If LJahr < 1904 And ActiveWorkbook.Date1904 Then
 Ostern = Wert
Else
 Ostern = DateValue(Wert)
End If

End Function
Gruß Tino
Anzeige
lösche noch ....
Tino
Hallo,
And ActiveWorkbook.Date1904
dann müsste es perfekt sein.
Function Ostern(LJahr As Long) As Variant
Dim Wert As Variant, X As Long, y As Long, z As Long
X = Int(LJahr / 100)
y = (19 * (LJahr Mod 19) + X - Int(X / 4) - Int((X - Int((X + 8) / 25) + 1) / 3) + 15) Mod 30
z = (32 + 2 * (X Mod 4) + 2 * Int((LJahr Mod 100) / 4) - y - ((LJahr Mod 100) Mod 4)) Mod 7
Wert = y + z - 7 * Int(((LJahr Mod 19) + 11 * y + 22 * z) / 451) + 22
Wert = Format(IIf(Wert - 31  31, "04.", "03.") &  _
LJahr
If LJahr 

Gruß Tino
Anzeige
Klappt noch nicht
Klaus
Hallo Tino,
erst einmal Dankeschön für Deinen Code!
Bei mir unter dem Mac klappt das immer noch nicht.
Die alte und die neue Variante verhalten sich völlig identisch.
Auch eine Windows-Emulation zeigt das gleiche Ergebnis.
Wenn es bei Dir klappt muss es also am System liegen ...
Gruß
Klaus
Anzeige
keine Ahnung vom Mac. oT.
Tino
AW: Klappt noch nicht
Peterchen
Die Function sieht prima aus. Muss ich mal testen wenn ich Zeit habe.
Die Werte passen wohl nicht wenn 1904 Datum gewählt ist. Eventuell müssten 4*365 Tage + 1 Schaltjahr 1900 abgezogen werden ich.
Aber ich hätte gedacht das die Funktion DateValue(Wert) die passende Zahl zur Datumseinstellung ausgibt?
Vielleicht hilft das wenn die Funktion murks macht:
If ActiveWorkbook.Date1904 Then
Ostern = DateValue(Wert) - 1461
Else
Ostern = DateValue(Wert)
End If
Gruß Peter
Anzeige
AW: bei mir passt es...
Klaus
Hallo Tino und Peter.
Bei mir gehts immer noch nicht.
Sobald ich 1904-Datumswerte anklicke geht's 4 Jahre nach vorne.
Was auch immer da im Mac passiert – i don't know
:-(
Mit der angehängten Datei aus dem Internet ist es korrekt.
Ist allerdings keine UDF. Ich bin ratlos und lass es auf sich beruhen ...
Danke nochmals
Klaus
https://www.herber.de/bbs/user/64588.xls
Anzeige
hiermit müsste es funktionieren.
Tino
Hallo,
so müsste es gehen, egal ob 1904 eingestellt oder nicht.
Function Ostern(LJahr As Long) As Variant
Dim Wert As Variant, X As Long, y As Long, z As Long
Dim meArData
X = Int(LJahr / 100)
y = (19 * (LJahr Mod 19) + X - Int(X / 4) - Int((X - Int((X + 8) / 25) + 1) / 3) + 15) Mod 30
z = (32 + 2 * (X Mod 4) + 2 * Int((LJahr Mod 100) / 4) - y - ((LJahr Mod 100) Mod 4)) Mod 7

Wert = y + z - 7 * Int(((LJahr Mod 19) + 11 * y + 22 * z) / 451) + 22
Wert = Format(IIf(Wert - 31 < 1, Wert, Wert - 31), "00") & "." & IIf(Wert > 31, "04.", "03.") & LJahr

If LJahr < 1904 Then
 Ostern = CStr(Wert)
Else
 meArData = Split(Wert, ".")
 Wert = CLng(DateSerial(meArData(2) * 1, meArData(1) * 1, meArData(0) * 1))
 Ostern = Wert - IIf(ActiveWorkbook.Date1904, 1462, 0)
End If

End Function
Gruß Tino
Anzeige
Entfassung Datumswert 1904 u. 1900
Tino
Hallo,
hier die Entfassung bei Einstellung Datumswert 1904 wird ab 1903 und kleiner als Text dargestellt.
Bei Datumswert 1900 (Standard Excel Einstellung) wird ab 1899 und kleiner als Text dargestellt.
Die Korrekturberechnung von 1462 Tagen ist mit eingebaut.
https://www.herber.de/bbs/user/64591.xls
Viel Spaß damit.
Gruß Tino
Anzeige
AW: Entfassung Datumswert 1904 u. 1900
Klaus
Hallo Tino,
schläfst Du eigentlich auch mal?
:-)
Ich mag's ja gar nicht sagen, aber es geht immer noch nicht.
Mit Sub oder Funktion nicht definiert springt er zu Split(Wert, ".")
Anscheinend gibt es diesen Befehl nicht unter dem Mac.
"Normalerweise" sind fast alle Dateien 1:1 mit Windows kompatibel.
Scheint so, als hätte ich hier den absoluten NoGo heraus gefischt.
Trotzdem, danke nochmals für Deine Unermüdlichkeit!
Ich werde es einfach zu Fuß machen ...
Lieben Gruß
Klaus
Anzeige
Nicht zu glauben – es geht!
Klaus
Hallo Tino,
WOW! Klasse! Mit der Mid Funktion klappt es endlich!
Schön, dass sich Dein Einsatz doch noch gelohnt hat.
Ich hoffe, dass alle Macianer diese wichtige Funktion
im Archiv finden.
Dankeschön
Klaus
Anzeige
danke für die positive Rückmeldung oT.
Tino
versteckte Tabelle
Tino
Hallo,
schau mal im VBA da gibt es eine Tabelle mit den Namen Feiertage.
Blende diese im VBA wie im Bild gezeigt ein.
Userbild
Gruß Tino
AW: versteckte Tabelle
Peterchen
Hi Tino,
das habe ich ja schon gemacht.
Und genau in dieser Tabelle148 (Feiertage) steht in Zelle A4 "=Ostern"
Aber woher kommt diese Osterberechnung ?
Gruß Peter
Anzeige
AW: versteckte Tabelle
Tino
Hallo,
der Osterfeiertag wird mit der Formel die hinter den Namen Ostern versteckt ist berechnet.
Alle anderen Feiertage lassen sich von diesen ableiten.
Bei Excel Gut, müsstest Du schon mal was von Namen gehört haben.
Gruß Tino
AW: versteckte Tabelle
Peterchen
Hi Tino,
nun einen Namen Ostern gibt es aber in der Datei scheinbar nicht.
Mir wird als einziger Name j angezeigt für die Zelle "Cover!C9" als Jahr.
Das eine Berechnung hinter "=Ostern" versteckt sein muss ist mir klar.
Aber wo ist sie versteckt ?
Gibt es noch andere Namenslisten als die oben links neben dem Zelleninhalt?
Man kann übrigens Excel mäßig und VBA gut nicht auswählen, so das ich mich für Excel gut VBA gut als passendste Auswahl entschieden haben *zwinker*
Gruß Peter
Anzeige
Thema: Level Einstufung
Tino
Hallo,
ist ja nichts gegen einzuwenden wie Du Deinen Level beurteilst,
ist halt eben nur dass die Antworten entsprechend auch gegeben werden.
Daher wenn ich eine Frage stelle, Stufe ich mich lieber etwas weiter unten ein
(vielleicht stimmt dies ja auch bei mir ;-)) und
bekomme dann meist auch ausführlicher beschriebene Antworten.
Naja Dein Problem ist ja nun gelöst, wünsche noch ein schönes Wochenende.
Gruß Tino
Anzeige
AW: Ostern im Tipp 0502 Jahreskalender
Hajo_Zi
Halo Peter,
gehe auf Einfügen, Namen, Namen definieren.
Ich hoffe mal ich habe es jetzt nicht falsch in Erinnerung, habe zur Zeit nur Version 2007
Gruß Hajo
AW: Ostern im Tipp 0502 Jahreskalender
Peterchen
Hi Hajo,
ja da ist die Definition für Ostern! Danke!
Geht in meinem Excel 10 auch und muss ja auch schon 2005 gegangen sein ;)
Super dann habe ich wieder was über Excel dazu gelernt,
und weiß nun auch das diese Formel in der Datei nicht die beste ist *g*
Besten Dank, Peter
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Ostern im Jahreskalender mit Excel


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Datei: Lade die Datei mit dem Tipp 0502 herunter und öffne sie in Excel.

  2. Suche nach der Funktion Ostern: In der Tabelle „Feiertage“ sollte in Zelle A4 die Formel =Ostern stehen.

  3. Definiere die Osterberechnung: Wenn die Funktion nicht definiert ist, gehe zu „Einfügen“ > „Namen“ > „Namen definieren“. Hier kannst du die Berechnung für Ostern hinzufügen.

  4. Implementiere die Osterformel: Verwende die folgende VBA-Funktion für die Berechnung von Ostern:

    Public Function Ostern(ByVal y As Integer) As Date
       ' Berechnung nach der Gauss'schen Formel
       Dim k As Integer, m As Integer, a As Integer, d As Integer, r As Integer
       k = y \ 100
       m = 15 + (3 * k + 3) \ 4 - (8 * k + 13) \ 25
       a = y Mod 19
       d = (19 * a + m) Mod 30
       r = d \ 29 + (d \ 28 - d \ 29) * (a \ 11)
       Ostern = DateSerial(y, 3, 21 + d - r) + 7 - Weekday(DateSerial(y, 3, 21 + d - r), vbMonday)
    End Function
  5. Nutze die Funktion: Gib in Zelle B4 die Formel =Ostern(A4) ein, um das Datum für Ostern für das Jahr in Zelle A4 zu berechnen.


Häufige Fehler und Lösungen

  • Fehler: Unbekannter Name: Wenn du =Ostern eingibst und einen Fehler erhältst, stelle sicher, dass die Funktion korrekt in VBA definiert ist.
  • Fehler bei der Berechnung: Achte darauf, dass die Implementierung der Gauss'schen Formel korrekt ist. Manchmal sind Anpassungen nötig, um Ungenauigkeiten in bestimmten Jahren zu vermeiden.
  • Excel-Versionen: Unterschiede zwischen Excel-Versionen (wie 2007 oder 2010) können dazu führen, dass Funktionen nicht verfügbar sind. Stelle sicher, dass die Funktion in deiner Excel-Version unterstützt wird.

Alternative Methoden

  • Lichtenberg-Methode: Eine alternative Methode zur Berechnung von Ostern ist die Lichtenberg-Formel. Diese kann in ähnlicher Weise in VBA implementiert werden.

    Public Function OsternLichtenberg(ByVal y As Integer) As Date
       ' Lichtenberg Methode
       Dim k As Integer, m As Integer, a As Integer, d As Integer, r As Integer
       k = y \ 100
       m = 15 + (3 * k + 3) \ 4 - (8 * k + 13) \ 25
       a = y Mod 19
       d = (19 * a + m) Mod 30
       r = d \ 29 + (d \ 28 - d \ 29) * (a \ 11)
       OsternLichtenberg = DateSerial(y, 3, 21 + d - r) + 7 - Weekday(DateSerial(y, 3, 21 + d - r), vbMonday)
    End Function
  • Verwendung von Online-Ressourcen: Du kannst auch Online-Rechner verwenden, um Ostern zu berechnen, falls du keine VBA-Funktion nutzen möchtest.


Praktische Beispiele

Hier sind einige Beispiele zur Berechnung von Ostern:

Jahr Ostern
2000 23. April 2000
2010 4. April 2010
2021 4. April 2021
2022 17. April 2022

Verwende die Formel =Ostern(A2) in Excel, um die Daten für verschiedene Jahre zu erhalten.


Tipps für Profis

  • Namen in Excel nutzen: Du kannst die Funktion auch über definierte Namen aufrufen, um die Lesbarkeit zu verbessern.
  • Datenvalidierung einsetzen: Verwende Datenvalidierung, um sicherzustellen, dass nur gültige Jahre in die Berechnung eingegeben werden.
  • Debugging in VBA: Wenn es Probleme gibt, nutze den Debugger in VBA, um den Code Schritt für Schritt zu überprüfen.

FAQ: Häufige Fragen

1. Wie errechnet sich Ostern? Ostern wird durch verschiedene Formeln wie die Gauss'sche oder die Lichtenberg-Methode berechnet, wobei das Datum des ersten Vollmonds nach der Frühlings-Tagundnachtgleiche berücksichtigt wird.

2. Welche Excel-Version wird benötigt? Die beschriebenen Methoden funktionieren in Excel 2007 und höher, wobei VBA-Funktionen erforderlich sind.

3. Warum funktioniert die Formel nicht in meinem Excel? Stelle sicher, dass die Funktion in VBA korrekt definiert ist und dass du die richtige Excel-Version verwendest, die VBA unterstützt.

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