konto usunięte

Temat: daty daty

czy można w Excelu wydusić automatycznie generowaną datę ostatniego dnia roboczego w określonym miesiącu w przedziale poniedziałek - piatek.
Dla przykładu miesiąc paździenik 2009 kończył się w sobote chodzi aby w określonej komórce pojawiła się automatycznie data w tym przypadku 2009.10.30 ???

Sławek
Ryszard M.

Ryszard M. Księgowy | Analityk
danych

Temat: daty daty

Spróbuj pokombinować z funkcją =DATA(;;) przy czym by uzyskać ostatni dzień to przyjąłbym miesiąc następny i potem w wartości zrobił -1 dzień... a potem to przeanalizował przez =JEŻELI(;;) "czy ten dzień nie jest sobotą lub niedzielą?" a do tego użył wyniku z funkcji =DZIEŃ.TYG(;). Nie mogę teraz sprawdzić - dlatego też nie daję gotowego rozwiązania. Pozdrawiam

konto usunięte

Temat: daty daty

może w ten sposób ?

konto usunięte

Temat: daty daty

jest ok Wojtek ale czy da radę aby w innych miesiącach też rozpoznawało???
bo np. juz w listopadzie funkcja nie zwraca żądanej daty.

Sądzę że będzie z tym kłopot ... szukałem ale Excel nie ma takowej funkcji

Ale dzięki Wam za podpowiedzi

konto usunięte

Temat: daty daty

Sławomir Śmigielski:
jest ok Wojtek ale czy da radę aby w innych miesiącach też rozpoznawało???
bo np. juz w listopadzie funkcja nie zwraca żądanej daty.

Sądzę że będzie z tym kłopot ... szukałem ale Excel nie ma takowej funkcji

Ale dzięki Wam za podpowiedzi

hmm u mnie zwraca, dodatkowo sprawdziłem styczeń AD2010 i też śmiga...Wojciech K. edytował(a) ten post dnia 01.12.09 o godzinie 11:45

konto usunięte

Temat: daty daty

przepraszam u mnie wkradł się mały bład. Wszystko gra

Podziękowania WojtkuSławomir Śmigielski edytował(a) ten post dnia 01.12.09 o godzinie 11:37
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: daty daty

Możesz też w ten sposób:

Function OstatniDzienRoboczy(MojaData As Date, _
Optional Slownie As Boolean = False) As Variant

Dim DzienTyg As Integer
Dim OstatniDzien As Date

Application.Volatile

OstatniDzien = DateSerial(Year(MojaData), Month(MojaData) + 1, 1) - 1
DzienTyg = Weekday(OstatniDzien, vbMonday)

If Slownie = False Then

Select Case DzienTyg
Case 1 To 5: OstatniDzienRoboczy = Day(OstatniDzien)
Case 6: OstatniDzienRoboczy = Day(OstatniDzien) - 1
Case 7: OstatniDzienRoboczy = Day(OstatniDzien) - 2
End Select

ElseIf Slownie = True Then

Select Case DzienTyg
Case 1 To 5: OstatniDzienRoboczy = Format(OstatniDzien, "dddd")
Case 6: OstatniDzienRoboczy = Format((OstatniDzien - 1), "dddd")
Case 7: OstatniDzienRoboczy = Format((OstatniDzien - 2), "dddd")
End Select

End If

End Function


Funkcja posiada 2 argumenty:
- pierwszy obowiązkowy z dowolną datą
- drugi opcjonalny (domyślnie FALSE), który wedle życzenia pokazuje ostatni dzień roboczy albo w formie liczby (FALSE), albo słownie (TRUE)


Obrazek
Mariusz Jankowski edytował(a) ten post dnia 01.12.09 o godzinie 11:40
Ryszard M.

Ryszard M. Księgowy | Analityk
danych

Temat: daty daty

Wow... I pomimo, że już rozwiązanie poszło, to dla potomnych ;) wkleję przykład pojedynczej formuły korzystającej ze standardowych funkcji Excela:

=JEŻELI(DZIEŃ.TYG((DATA(ROK(A1);MIESIĄC(A1)+1;1)-1);2)=7;(DATA(ROK(A1);MIESIĄC(A1)+1;1)-1)-2;JEŻELI(DZIEŃ.TYG((DATA(ROK(A1);MIESIĄC(A1)+1;1)-1);2)=6;(DATA(ROK(A1);MIESIĄC(A1)+1;1)-1)-1;(DATA(ROK(A1);MIESIĄC(A1)+1;1)-1)))


gdzie A1 to dowolna sensowna data. Formuła nie uwzględnia wyjątków poniedziałku wielkanocnego i nie przewiduje sytuacji gdy kiedyś w Polsce uchwalą święto z końcem któregoś miesiąca ;).
Pozdrawiam
Tomasz Głuszkowski

Tomasz Głuszkowski właściciel, 4TG

Temat: daty daty

Ryszard M.:
Wow... I pomimo, że już rozwiązanie poszło, to dla potomnych ;) wkleję przykład pojedynczej formuły korzystającej ze standardowych funkcji Excela:

=JEŻELI(DZIEŃ.TYG((DATA(ROK(A1);MIESIĄC(A1)+1;1)-1);2)=7;(DATA(ROK(A1);MIESIĄC(A1)+1;1)-1)-2;JEŻELI(DZIEŃ.TYG((DATA(ROK(A1);MIESIĄC(A1)+1;1)-1);2)=6;(DATA(ROK(A1);MIESIĄC(A1)+1;1)-1)-1;(DATA(ROK(A1);MIESIĄC(A1)+1;1)-1)))


gdzie A1 to dowolna sensowna data. Formuła nie uwzględnia wyjątków poniedziałku wielkanocnego i nie przewiduje sytuacji gdy kiedyś w Polsce uchwalą święto z końcem któregoś miesiąca ;).
Pozdrawiam


popatrz na wzór, czy po prawie miesiącu go rozumiesz?
przyjmijmy, że w komórce D2 jest data
w komorce E2 wzór: =DATA(ROK(D2);MIESIĄC(D2)+1;1)-1
w F2: =E2-MAX(DZIEŃ.TYG(E2;2)-5;0)
i w G2: =TEKST(F2;"dddd")
pozdrawiam, Tomek
Ryszard M.

Ryszard M. Księgowy | Analityk
danych

Temat: daty daty

Tak, rozumiem i pamiętam pomysł by użyć dwóch funkcji =JEŻELI() eliminujących szósty i siódmy dzień tygodnia. Jeśli Panu, osobie bardziej biegłej w Excelu, udało się po miesiącu zaproponować krótsze rozwiązanie - to gratuluję... Wszak to Excel, sposobów na uzyskanie wyniku może być wiele i być może też jeszcze krótszych :-).
Pozdrawiam serdecznie
Tomasz Głuszkowski

Tomasz Głuszkowski właściciel, 4TG

Temat: daty daty

Ryszard M.:
Tak, rozumiem i pamiętam pomysł by użyć dwóch funkcji =JEŻELI() eliminujących szósty i siódmy dzień tygodnia. Jeśli Panu, osobie bardziej biegłej w Excelu, udało się po miesiącu zaproponować krótsze rozwiązanie - to gratuluję... Wszak to Excel, sposobów na uzyskanie wyniku może być wiele i być może też jeszcze krótszych :-).
Pozdrawiam serdecznie

Panie Ryszardzie
ostatnio jestem tu bardzo rzadko, przeglądam kilka postów, czasem coś napiszę i już mnie nie ma:)
mam zbyt dużo pracy

Dobrze, że Pan poruszył możliwość: wielości rozwiązań, ale jeśli tak jest to muszą być gorsze i lepsze, czyż nie?
a skoro tak, to proponuję używać tylko tych, które są na tyle proste, aby potem je rozumieć
(dlatego wprowadziłem standardy dla pewnych rozwiązań - to daje
znakomite efekty, szczególnie wtedy, kiedy większość pracowników w firmie posługuje się nimi)

Nie chodzi tu głównie o krótsze rozwiązanie (czasem dłuższe jest lepsze - czytelniejsze).
Jest również czytelniej jeśli długie wzory podzieli się na części - to daje efekty w postaci lepszej czytelności > łatwiejszej interpretacji > szybszej analizy i szybszej modyfikacji

Pozdrawiam Serdecznie w Nowym RokuTomasz Głuszkowski edytował(a) ten post dnia 07.01.10 o godzinie 19:25

Temat: daty daty

Przyłaczę sie jeszcze do dyskusji.

Excel posiada (po doinstalowaniu dodatków w opcjach Excela) bardzo ciekawą funkcję NETWORKDAYS, która oblicza liczbę dni roboczych pomiędzy zakresm jakichś dat. Można by myślę tu z niej skorzystać, sprawdzając czy ostatni dzień jest roboczy czy nie.

Co ciekawe formuła ta z zasady przyjmuje za dni robocze dni od poniedziałku do piątku, a pozostałe swięta nie przypadające w sobotę lub niedzielę (np. 1 stycznia, etc a takze typowe swięta dla Polski, np. 15 sierpnia) można wskazać jako kolejne elementy formuły, co zapewnia jej uniwerslaność.

Ela



Wyślij zaproszenie do