konto usunięte

Temat: Formuła obliczajaca datę Wielkanocy

=ZAOKR.W.DÓŁ(DATA(A1;5;DZIEŃ(MINUTA(A1/38)/2+56));7)-34

gdzie komórka A1 zawiera rok. Pamiętajmy o formatowaniu wyniku w postaci daty.

Wesołych Świąt !!!Marcin Dzierżanowski edytował(a) ten post dnia 03.04.10 o godzinie 10:02
Artur K.

Artur K. sam sobie sterem,
żeglarzem i okrętem
:-)

Temat: Formuła obliczajaca datę Wielkanocy

Jest mały problem. Powyższa formuła wylicza termin świąt prawidłowo w zakresie od 1900 do 2078 roku. :-)
Jeśli ktoś planuje wyjazd na święta do cioci powyżej 2078 roku powinien skorzystać z funkcji VBA:
Public Function EasterUSNO(YYYY As Long) As Long
Dim C As Long
Dim N As Long
Dim K As Long
Dim I As Long
Dim J As Long
Dim L As Long
Dim M As Long
Dim D As Long

C = YYYY \ 100
N = YYYY - 19 * (YYYY \ 19)
K = (C - 17) \ 25
I = C - C \ 4 - (C - K) \ 3 + 19 * N + 15
I = I - 30 * (I \ 30)
I = I - (I \ 28) * (1 - (I \ 28) * (29 \ (I + 1)) * ((21 - N) \ 11))
J = YYYY + YYYY \ 4 + I + 2 - C + C \ 4
J = J - 7 * (J \ 7)
L = I - J
M = 3 + (L + 40) \ 44
D = L + 28 - 31 * (M \ 4)
EasterUSNO = DateSerial(YYYY, M, D)
End Function
W komórce wpisujemy formułę
=EasterUSNO(rrrr)
gdzie rrrr jest czterocyfrowym rokiem.
Algorytm pochodzi ze strony http://aa.usno.navy.mil/faq/docs/easter.php

I jeszcze mały teścik obu rozwiązań:
Sub Niescislosci()
Dim i As Long
Dim strFrmla As String
Dim w As Long

w = 2
Application.ScreenUpdating = False
ActiveWorkbook.Worksheets.Add
Cells(1).Value = "Formuła"
Cells(2).Value = "Funkcja"

For i = 1900 To 3000
strFrmla = "=FLOOR(DATE(" & i & ",5,DAY(MINUTE(" & i & "/38)/2+56)),7)-34"

If Evaluate(strFrmla) <> EasterUSNO(i) Then
With Cells(w, 1).Resize(1, 2)
.NumberFormat = "m/d/yyyy"
.Cells(1) = Evaluate(strFrmla)
.Cells(2) = EasterUSNO(i)
w = w + 1
End With
End If
Next i

ActiveSheet.Columns("A:B").AutoFit
Application.ScreenUpdating = True
End Sub


Kto ma rację? Nie wiem.
Ale wszystkim Wesołych Świąt życzę.

ArtikArtur K. edytował(a) ten post dnia 03.04.10 o godzinie 14:36



Wyślij zaproszenie do