Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Folgetag ohne Wochenenden und Feiertage
#11
RPP63:

  • meine Formel wollte nicht als Argument in den ARBEITSTAG(); warum, weiß ich nicht :(
  • noch ist die Excelformeln-Osterformel aus dem Formelverkürzungswettbewerb ok, da das Jahr 2079 noch ein Weilchen entfernt ist (wo sie angeblich als nächstes nicht funktioniert)
Antworten Top
#12
(02.10.2022, 19:43)LCohen schrieb:
  • da das Jahr 2079 noch ein Weilchen entfernt ist

Und da ich nicht mit Methusalem konkurrieren möchte, interessiert es mich (exceltechnisch) denkbar wenig was dann passiert …
(die 63 im Nick ist mein Geburtsjahr)

Selbst Gauß hat ja noch ein paar Fehler in seiner Formel.
Ich hatte vor etlichen Jahren mal das Gleichungssystem von Lichtenberg in VBA umgesetzt und dies bei Einführung von LET() in Excel übersetzt:
=LET(j;SEQUENZ(;15;JAHR(HEUTE()));
    FFT;DATUM(j;1;{1;121;276;305;359;360})+WENN(MONAT(DATUM(j;2;29))=2;{0;1;1;1;1;1});
    A;GANZZAHL(j/100);
    B;15+GANZZAHL((3*A+3)/4)-GANZZAHL((8*A+13)/25);
    C;2-GANZZAHL((3*A+3)/4);
    D;REST(j;19);
    E;REST(19*D+B;30);
    F;GANZZAHL((E+GANZZAHL(D/11))/29);
    G;21+E-F;
    H;7-REST(j+GANZZAHL(j/4)+C;7);
    I;7-REST(G-H;7);
    OS;G+I;
    K; DATUM(j;3;OS);
    OFT;K+{-2;0;1;39;49;50;60};
    SORTIEREN(VSTAPELN(FFT;OFT)))

.
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#13
Und wer meint, dass so ein Gleichungssystem doch ziemlich langsam sein müsste, darf gerne mal folgendes ausprobieren:
Aufgabe:
Ermittle alle Ostersonntage ab diesem Jahr bis zum Ende der Excel-Zeitrechnung (Jahr 9999)
die auf den letztmöglichen Termin 25.04. fallen.
Spalte A als Datum formatieren.
In A1:
=LET(j;SEQUENZ(9999-JAHR(HEUTE())+1;;JAHR(HEUTE()));
    A;GANZZAHL(j/100);
    B;15+GANZZAHL((3*A+3)/4)-GANZZAHL((8*A+13)/25);
    C;2-GANZZAHL((3*A+3)/4);
    D;REST(j;19);
    E;REST(19*D+B;30);
    F;GANZZAHL((E+GANZZAHL(D/11))/29);
    G;21+E-F;
    H;7-REST(j+GANZZAHL(j/4)+C;7);
    I;7-REST(G-H;7);
    OS;G+I;
    K; DATUM(j;3;OS);
    FILTER(K;TEXT(K;"TTMM")="2504"))


Die 63 Treffer aus 7.978 Jahren werden in einem Wimpernschlag ermittelt.
(zugegeben, ich hab gerade ein wenig Langeweile Wink)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#14
Eine schöne Aufgabe, um das mit VBA zu vergleichen!

(wohlgemerkt: Nicht als Sub, sondern als herunterkopierte Function mit Einzelermittlung. Die Sub wäre mit einem Variant-Array - vermutlich - genauso schnell, wie die RPP63-Tabellenfunktion).

Vielleicht kannst Du ja mit Deiner Funktion auch noch einmal die relativen Häufigkeiten der einzelnen Osterdatümer in einer Kurve darstellen. Ob die wohl "digital" normalverteilt ist? Ich habe es vergessen. Wenn der 25.4. der spätestmögliche ist, wäre die Randhäufigkeit ja fast 1%. Somit wäre bei knapp 30 möglichen Osterdatümern eine Normalverteilung ziemlich flach.
Antworten Top
#15
And here it is:
   


ABCD
1Oster_SODatAnz
217.04.17.04.202222.03.41
309.04.09.04.202323.03.65
431.03.31.03.202424.03.107
520.04.20.04.202525.03.167
605.04.05.04.202626.03.198
728.03.28.03.202727.03.220
816.04.16.04.202828.03.252
901.04.01.04.202929.03.272
1021.04.21.04.203030.03.281
1113.04.13.04.203131.03.272
1228.03.28.03.203201.04.259

ZelleFormel
A2=TEXT(B2#;"TT.MM.")
B2=LET(j;SEQUENZ(9999-JAHR(HEUTE())+1;;JAHR(HEUTE()));
    A;GANZZAHL
(j/100);
    B;15+GANZZAHL
((3*A+3)/4)-GANZZAHL((8*A+13)/25);
    C;2-GANZZAHL
((3*A+3)/4);
    D;REST
(j;19);
    E;REST
(19*D+B;30);
    F;GANZZAHL
((E+GANZZAHL(D/11))/29);
    G;21+E-F;
    H;7-REST
(j+GANZZAHL(j/4)+C;7);
    I;7-REST
(G-H;7);
    OS;G+I;
    K; DATUM
(j;3;OS);
    K)
C2=EINDEUTIG(SORTIERENNACH(A2#;--TEXT(B2#;"MMTT")))
D2=ZÄHLENWENN(A2#;C2#)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#16
Interessante Verteilung ... ist nicht leicht zu kommentieren, da die Osterformel von so einigem abhängt.
Antworten Top
#17
Wenn es die ganzen Stellschrauben nicht gäbe, wäre die Normalverteilung ja so:
   
Kommt der tatsächlichen Verteilung doch recht nahe.
(mit =RUNDEN(D2#/D$2;0) erhalte ich "fast" obiges Ergebnis)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#18
(03.10.2022, 09:13)LCohen schrieb: Eine schöne Aufgabe, um das mit VBA zu vergleichen!

(wohlgemerkt: Nicht als Sub, sondern als herunterkopierte Function mit Einzelermittlung. […]).
Machs Dir selbst!  19

Allgemeines Modul:
Function Ostersonntag(j&) As Variant
Dim x(9) As Long
  x(0) = j \ 100
  x(1) = 15 + (3 * x(0) + 3) \ 4 - (8 * x(0) + 13) \ 25
  x(2) = 2 - (3 * x(0) + 3) \ 4
  x(3) = j Mod 19
  x(4) = (19 * x(3) + x(1)) Mod 30
  x(5) = (x(4) + x(3) \ 11) \ 29
  x(6) = 21 + x(4) - x(5)
  x(7) = 7 - (j + j \ 4 + x(2)) Mod 7
  x(8) = 7 - (x(6) - x(7)) Mod 7
  x(9) = x(6) + x(8)
Ostersonntag = DateSerial(j, 3, x(9))
'denn der 32.3. ist automatisch der 1.4. 
End Function

Jetzt füllst Du Spalte A mit den Oster-Daten 25.4.:
Sub OS25_4()
Dim j&, z&, OS As Date
Dim Start#
Application.ScreenUpdating = False
Start = Timer
z = 1
For j = 2022 To 9999
  OS = Ostersonntag(j)
  If Format(OS, "ddmm") = "2504" Then
    Cells(z, 1) = OS
    z = z + 1
  End If
Next
Debug.Print Timer - Start
End Sub

Dauert bei mir auch nur schlappe 0,125 Sekunden!
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#19
Etwas geschwindiger:

Code:
Sub M_snb()
  ReDim sn(7977)
  t1 = Timer

  For j = 0 To UBound(sn)
    sn(j) = Format(F_Ost(j + 2022), "dd-mm-yyyy")
  Next

  sp = Filter(sn, "25-04")
  Cells(1).Resize(UBound(sp) + 1) = Application.Transpose(sp)
 
   MsgBox Timer - t1
End Sub

0,0625 s
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste