Pełna wersja: Excel Forum - Porady, Pomoc, Excel Help, Excel FAQ
forum użytkowników Excela - makra, formuły, VBA, funkcje - porady, Excel
 
lo - fi version Excel Forum - Porady, Pomoc, Excel Help, Excel FAQ index

Jak wyliczyć dni tygodnia w danym okresie?
Kliknij tutaj aby przejśc do pełnej wersji tematu

 
       Excel Forum - Porady, Pomoc, Excel Help, Excel FAQ Strona Główna -> Mam problem z formułą
Poprzedni temat :: Następny temat  
Pszemor Wysłany: 08-09-2007, 22:19  

Mam zrobić arkusz, który po podaniu w kolejnych komórkach wybranej kolumny dat dni wolnych od lekcji z powodu świąt, ferii świątecznych i innych przyczyn (z pominięciem sobót i niedziel), wyznaczy w wybranej komórce liczbę lekcji, które się odbędą w wybranym dniu tygodnia w danym semestrze. Dzień tygodnia, w którym odbywa się dana lekcja (jedna tygodniowo) określamy wpisując datę dnia, w którym lekcja ta odbędzie się po raz pierwszy. Data dnia kończącego dany semestr powinna być podawana w osobnej komórce i uwzględniana w analizie.
Z góry dziękuję za pomoc
cerber1 Wysłany: 09-09-2007, 16:36  

Funkcja NETWORKDAYS() ci pomoże. Jednak musisz ją doinstalować, gdyż domyślnie podczas instalacji nie jest brana pod uwagę.
W załączniku niezupełnie to co potrzebujesz, ale pozwoli ci się zorientować.
LAnd Wysłany: 09-09-2007, 18:51  

projekt przetestować!

organizacja danych wejściowych :

(zbior : semestr przykładowy.xls)
zielonym obszarom nadać nazwy tak jak nagłówki nad nimi
w lewo od dat początkowych przedmiotów - ich nazwy
w prawo od dat wolnego dodatkowego ( oprócz urzędowych dni, sobót i niedziel) - nazwy okresu wolnego

obliczenie
dane identyfikowane są wg zdefiniowanych nazw

otworzyć zbiór z danymi
z modułu Przedmioty -> uruchomić procedurę ObliczDane
spowoduje utworzenie, na podstawie dowolnego aktywnego zeszytu zawierającego zdefiniowane nazwy
w nowym zeszycie czterech arkuszy :
"kalendarz semestru"
"daty świąt w semestrze"
"terminarz przedmiotów"
te dane można analizować np auto filtrem
"tabela wg tygodni"

okres ustalany jest na podstawie najmniejszej daty z rozpoczęcia przedmiotów - data początkowa i daty końca semestru
tygodnie ponumerowane są w ten sposób, że pierwszy tydzień zawiera datę początkową a ostatni datę końca semestru

tworzona jest tablica świat urzędowych i zdefiniowanych wolnych dni SwArr - kopiowana do tablicy TblWolnych

Kod: TblWolnych = Application.WorksheetFunction.Transpose(SwArr)
tej tablicy używa procedura GDniRob,
która oblicza dzień Wielkanocny, Poniedziałek Wielkanocny i Boże Ciało
algorytmem Karla Friedricha Gauss'a

tworzona jest tablica 3- wymiarowa dla 1 lub dwóch lat (jeżeli okres obejmuje przełom roku)
wymiary tablicy : rok miesiąc dzień
32 element - ilość dni w miesiącu
2 wiersz element 31 - rok tabeli ( poki co 31 luty nie istnieje )
Fałsz - dzień świateczny, sobota, niedziela lub dodatkowe zdefiniowane wolne
Prawda - dzień roboczy
pozostałe puste

terminarz przedmiotów jest tworzony od daty początkowej przedmiotów co 7 do ilości dni tygodni minus 1 wg wzoru

Kod: for i = 0 to IleTygodni -1
data = dataPocz + 7*i
tak obliczona data jest uwzględniona jeżeli mieści się w okresie i nie wypada w dzień wolny

w zbiorze umieszczona jest kontrolka z kalendarzem do wyboru daty (wywołanie Shift-Ctrl-K , krótki opis załaczony)
plitfyg Wysłany: 09-09-2007, 19:48  

Popełniłem potwora !

Do tematu podszedłem nieco inaczej niż koledzy, więc możesz teraz wybierać pomiędzy kilkoma rozwiązaniami. Podobnie jak LAnd nawołuję jednak - PRZETESTOWAĆ !
Sprawdziłem na kilku zakresach dat i różnych dniach "świątecznych" i wyniki pokazywało mi poprawne, ale .... chcesz mieć pewność - sprawdź sam ;-)

Rozwiązanie uproszczone nieco (w sumie niedziela jest i muszę czas poświęcić także rodzinie), ale mam nadzieje, że ci pomoże.

W załączniku znajdziesz moja propozycję. Masz tam kilka opisów. Poniżej kilka słów dodatkowych wyjaśnień.

Jako dane wejściowe podajesz daty rozpoczęcia i zakończenia semestru, a także, tak jak chciałeś, datę pierwszych zajęć (na jej podstawie wywnioskuje Excel później dzień tygodnia z zajęciami). Wszystkie te daty MUSZĄ być w formacie Excelowskiej daty.

Poniżej, w niewielkiej tabelce wpisujesz daty świąt (poza sobotami i niedzielami, które już i tak będą uwzględnione).

No i w komórce G5 znajdziesz wynik. Mam nadzieję, że wynik, którego szukasz. Kilka słów o moim podejściu do tematu.

Użyta funkcja ma jakby dwa składniki. W pierwszym liczę liczbę określonych dni tygodnia (poszukiwany dzień tygodnia określony jest data pierwszych zajęć) w semestrze.

Robię to formułą tablicową:

Cytat: SUMA(JEŻELI(DZIEŃ.TYG(D5 -1+ WIERSZ(ADR.POŚR("1:"&LICZBA.CAŁK(D6-D5)+1)))=DZIEŃ.TYG(D7);1;0))

Dla każdego dnia tygodnia w semestrze (wliczając pierwszy i ostatni) sprawdzam, czy jest to dzień tygodnia odpowiadający dniu tygodnia pierwszych zajęć. Funkcją Suma sumuję liczbę tych dni. Następnie od tej liczby odejmuję liczbę dni wolnych od zajęć w danym semestrze.

Cytat: SUMA(LICZ.JEŻELI(dni_wolne;(D5 -1+ WIERSZ(ADR.POŚR("1:"&LICZBA.CAŁK(D6-D5)+1)))))

W moim rozwiązaniu funkcja porównuje każdą datę z podanego semestru z datami podanymi przez ciebie. Nie sprawdza czy daty podane przez ciebie odpowiadają dniom tygodnia z zajęciami. Rozwiązanie nieco "grubymi nićmi szyte" :-P

W zasadzie gdybyś bardzo chciał uprościć wszystko wystarczyłoby tylko zliczyć liczbę podanych przez Ciebie dat "świątecznych". O ile będziesz bowiem pewien, że wprowadzane daty "świąt" mieszczą się w zakresie semestru to liczbą podana przez powyższą funkcję będzie równa ilości wpisów ze "świątecznymi datami" w skoroszycie.

I na koniec uwaga:

Nie wprowadziłem żadnej kontroli sprawdzania, czy wprowadzane dane są poprawnę i czy mają sens. Jeżeli chcesz wszystko uczynić "głupotoodporne" i "user-friendly" to musisz sobie nad taką kontrolą popracować. Ewentualnie jeżeli moje rozwiązanie by działało i chciałbyś akurat z niego skorzystać to Ci w tym zakresie pomogę. Póki co zobacz sobie.

Plitfyg
magbo Wysłany: 11-09-2007, 23:34  

zajrzałam do Potwora bo lubię formułki tablicowe (własne - cudze rzadko rozumiem ;-) )
spróbowałam wymyślić swoją formułkę - i zdziwiłam sie przy sprawdzaniu

przy zmianie daty końca semestru daje wyniki identyczne jak u Plitfyga
ale jeśli zmienię pierwszy dzień zajęć albo któryś z dni wolnych - wyniki są inne

pozwoliłam sobie skorzystać ze ślicznie nazwanego dynamicznego zakresu - fajnie się nauczyc czegoś nowego

pzdr
plitfyg Wysłany: 12-09-2007, 00:37  

Być może "nabruździłem" jeszcze w innych miejscach - teraz nie mam bardzo czasu aby temu się przyjrzeć (co nie znaczy, że się nie przyjrzę), ale ... wreszcie zacytuję sam siebie :)

Cytat:
W moim rozwiązaniu funkcja porównuje każdą datę z podanego semestru z datami podanymi przez ciebie. Nie sprawdza czy daty podane przez ciebie odpowiadają dniom tygodnia z zajęciami. Rozwiązanie nieco "grubymi nićmi szyte"

Może to jest powodem błędu ? W swojej formule sprawdzam czy te daty dni wolnych mieszczą się w datach "od...do" semestru. Nie sprawdzam czy to jest faktycznie dzień zajęć. Tak więc jeżeli zajęcia są w czwartki, a jako dzień wolny od zajęć podam jakąkolwiek datę piątkową to moja formuła odejmie to od ilości dni z zajęciami. Pomimo, że w piątek zajęć nie ma. Po prostu założyłem, że te daty na liście będą zawsze "właściwe".

O ile nikt wcześniej nie wytknie mi błędów - przeanalizuję sobie jeszcze w wolnej chwili moją i Twoją formułę.

Plitfyg

P.S. Sorki, że przez momenty miałem Cię za faceta. Szowinista niepoprawny ze mnie.
magbo Wysłany: 12-09-2007, 01:01  

moja formułkado znaku "-" liczy dni tygodnia te same co początkowa data do końca semestru, potem odejmuje sumę takich dni wśród dni świątecznych.
Warunek użyty w naiwiasach ma wartość logiczną 0 lub 1 / fałsz lub prawda / i daje sie mnożyć albo sumować.

PS.
wole byc uwazana za faceta niż traktowana jak głuptas tylko z powodu płci. :-)
 
       Excel Forum - Porady, Pomoc, Excel Help, Excel FAQ Strona Główna -> Mam problem z formułą
Strona 1 z 1

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.



Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.