Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1104to1108
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige