ID tematu: 10541
 |
31. Wyliczanie świąt na podstawie daty |
| Autor |
Wiadomość |
ptychul
Excel Expert


Posty: 215
|
Wysłany: 2009-01-08, 09:23 31. Wyliczanie świąt na podstawie daty
|
|
|
Przedstawiam funkcję, która sprawdza czy dany dzień jest świętem (święta ruchome także).
Funkcja ta nie jest mojego autorstwa.
| Kod: | Function czy_swieto(kiedy As Date) As Boolean
Dim wielkanoc As Date
wielkanoc = WorksheetFunction.Floor(DateSerial(Year(kiedy), 5, Day(Minute(Year(kiedy) / 38) / 2 + 56)), 7) - 34
Select Case kiedy
Case DateSerial(Year(kiedy), 1, 1) 'Nowy rok
czy_swieto = True
Case DateSerial(Year(kiedy), 1, 6) 'Trzech Króli (Objawienie Pańskie)
czy_swieto = True
Case wielkanoc
czy_swieto = True
Case wielkanoc + 1 'Poniedziałek Wielkanocny
czy_swieto = True
Case DateSerial(Year(kiedy), 5, 1) 'Święto pracy
czy_swieto = True
Case DateSerial(Year(kiedy), 5, 3) 'Konstytucja 3 Maja
czy_swieto = True
Case wielkanoc + 60 'Boże Ciało
czy_swieto = True
Case DateSerial(Year(kiedy), 8, 15) 'Wniebowzięcie NMP
czy_swieto = True
Case DateSerial(Year(kiedy), 11, 1) 'Wszystkich Świętych
czy_swieto = True
Case DateSerial(Year(kiedy), 11, 11) 'Święto Niepodległości
czy_swieto = True
Case DateSerial(Year(kiedy), 12, 25) 'Boże Narodzenie
czy_swieto = True
Case DateSerial(Year(kiedy), 12, 26) 'Szczepana
czy_swieto = True
End Select
End Function |
Kaper: dodałem 6 stycznia, żeby ktoś nie przegapił |
_________________ Pozdrawiam
Ptychul |
|
 | ID posta:
54943
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
Trebor
Excel Expert

Posty: 2319
|
Wysłany: 2009-01-08, 16:25
|
|
|
Poniżej lista świąt obliczana formułami dla bieżącego roku:
| Kod: | =DATA(ROK(TERAZ());1;1)
=DATA(ROK(TERAZ());1;6)
=ZAOKR.W.DÓŁ(DATA(ROK(TERAZ());5;DZIEŃ(MINUTA(ROK(TERAZ())/38)/2+56));7)-34
=A3+1
=DATA(ROK(TERAZ());5;1)
=DATA(ROK(TERAZ());5;3)
=A3+60
=DATA(ROK(TERAZ());8;15)
=DATA(ROK(TERAZ());11;1)
=DATA(ROK(TERAZ());11;11)
=DATA(ROK(TERAZ());12;25)
=DATA(ROK(TERAZ());12;26)
|
Listę należy wkleić do pierwszej kolumny począwszy od komórki A1. Komórkom należy nadać format daty.
Lista nie jest moim dziełem, a szkoda.
Kaper: dodałem 6 stycznia, żeby ktoś nie przegapił i skorygowałem A2 na A3 (wielkanoc wyznaczona "magiczną formułą" , aby zachować układ formuł |
_________________ Trebor |
|
 | ID posta:
55002
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
Hellz
Starszy Forumowicz

Posty: 44
|
Wysłany: 2011-02-06, 03:41
|
|
|
| Trebor napisał/a: | | Kod: | | =DATA(ROK(TERAZ());1;6) |
| jeżeli ktoś robi kalendarz z możliwością cofnięcia się wstecz to warto dla 6 stycznia założyć dodatkowy warunek
| Kod: | | =JEŻELI(ROK(TERAZ())>=2011;DATA(ROK(TERAZ());1;6);"") |
|
_________________ rookie |
|
 | ID posta:
108005
|
|
|
 |
Trebor
Excel Expert

Posty: 2319
|
Wysłany: 2011-02-19, 17:27
|
|
|
Witam
| Kod: | Function czy_swieto(kiedy As Date) As Boolean
Dim wielkanoc As Date
wielkanoc = WorksheetFunction.Floor(DateSerial(Year(kiedy), 5, Day(Minute(Year(kiedy) / 38) / 2 + 56)), 7) - 34 |
W moim przypadku (komputerze) w tym roku termin święta Wielkiej Nocy obliczany powyższą funkcją jest błędny. Ta sama formuła wpisana w arkuszu kalkulacyjnym działa prawidłowo.
Mam nadzieję, że poprawne rozwiązanie jest tutaj http://www.cpearson.com/excel/Easter.aspx
Pozdrawiam |
_________________ Trebor |
|
 | ID posta:
109592
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
wuzeq
Excel Expert


Posty: 451
|
Wysłany: 2012-01-25, 16:32
|
|
|
A najbliższy rok, w którym funkcja vba zwróci błędną datę to 2038
Moja propozycja modyfikacji tej funkcji dla wielkanocy, żeby zwracała wynik taki sam jak formuła excelowa (prostsza niż w linku Trebora)
| Kod: | wielkanoc = WorksheetFunction.Floor(DateSerial(rok, 5, _
Day(Minute(rok / 38) / 2 + 56) - CInt(Minute(rok / 38) < 10)), 7) - 34 |
Różnica wynika z tego, że VBA.DAY zwraca wartość o jeden mniejszą w stosunku do excelowej funkcji DZIEŃ dla liczby mniejszej niż 61.
Ale zarówno formuła excelowa jak VBA zwrócą złą datę dla roku 2079, a począwszy od roku 2204 stają się praktycznie bezużyteczne |
|
 | ID posta:
146129
|
|
|
 |
Trebor
Excel Expert

Posty: 2319
|
Wysłany: 2012-02-29, 18:05
|
|
|
| Kiedy funkcja podana w moim linku poda błędną wartość? |
_________________ Trebor |
|
 | ID posta:
150876
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
wuzeq
Excel Expert


Posty: 451
|
Wysłany: 2012-02-29, 18:35
|
|
|
| Cytat: | | Moja propozycja modyfikacji tej funkcji dla wielkanocy, żeby zwracała wynik taki sam jak formuła excelowa (prostsza niż w linku Trebora) |
Niemniej przy wyliczaniu wielkanocy na lata powyżej 2200 i bodajże poniżej 1900, już nieodzowne będzie użycie większej funkcji z linka |
|
 | ID posta:
150879
|
|
|
 |
|
|