Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 10541 Skopiuj do schowka 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 Skopiuj do schowka
 
 
 

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łą" :tak , aby zachować układ formuł
_________________
Trebor
ID posta: 55002 Skopiuj do schowka
 
 

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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 

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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 

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 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum