Dziś temat, który miałam z tyłu głowy już dość długo. Pierwszy raz zaczęłam się zastanawiać na nim, kiedy tworzyłam brytyjski grafik czasu pracy. Anglicy mają kilka świąt, które wypadają zawsze w pierwszy poniedziałek miesiąca. Akurat nie było konieczności, abym wprowadzała taki warunek do arkusza, jednak zastanowił mnie on. Ponieważ od razu nie wymyśliłam rozwiązania, zostawiłam temat. Niestety nadal siedział mi on w głowie. 🙂
Niedawno odezwała się do mnie Marta, która pracuje w księgowości, i odgrzebała kwestię spod gruzów innych pomysłów. Marta ma bardziej skomplikowany problem, jednak zagadnienie, które dzisiaj omówię, jest niezbędne do jego rozwiązania. Pokażę dziś, jak się ustala datę np. pierwszego czwartku miesiąca. Napisałam „np.”, ponieważ zaprezentowaną metodą można ustalić dowolny numer dowolnego dnia tygodnia (oczywiście bez przesady – nie będziemy ustalać 15. poniedziałku miesiąca, bo taki przecież nie istnieje). 😉
Aby formuła była uniwersalna, będziemy potrzebowali następujących danych:
- Który z kolei dzień nas interesuje (np. pierwszy).
- Jaki dzień tygodnia (np. czwartek).
- W jakim miesiącu (np. październik).
- W którym roku (np. 2016).
Formatka jest prościutka i wygląda tak:
Dane wejściowe
Tutaj pamiętajcie, że formuła jest napisana tak, że pierwszym dniem tygodnia jest poniedziałek. Dlatego drugi argument w funkcji DZIEŃ.TYG to 2. Jeśli chcesz inaczej, to odpowiednio zmień ten argument.
Formuła
Jeśli chodzi o formułę, to jej logika jest prosta. Nie ma innego wyjścia, jak tylko po kolei sprawdzić, jakimi dniami tygodnia są pierwsze 7 dni danego miesiąca. Jeśli któryś z nich będzie naszym szukanym czwartkiem, wyświetlimy tę datę. Spróbujmy prześledzić to na podstawie października 2016. Tak wygląda on w kalendarzu:
I schemat sprawdzania:
Logika może i prosta, jednak zwykłymi formułami nie da się tego zrobić bez wielu dodatkowych kolumn pomocniczych, których chcemy uniknąć. Pozostają 2 rozwiązania: formuła tablicowa lub VBA. Dziś pokażę Wam tę pierwszą opcję, a drugą – jeśli będziecie chcieli (dajcie znać w komentarzach).
Formuła sprawdzająca dzień tygodnia pierwszych 7 dni miesiąca, a następnie wyświetlająca datę jest taka (komórka E3 na obrazku „Formatka”):
=MAX(JEŻELI(DZIEŃ.TYG(DATA(D3;C3;{1;2;3;4;5;6;7});2)=B3;DATA(D3;C3;{1;2;3;4;5;6;7});0))+7*(A3-1)
Tablicowym elementem formuły jest ostatni argument funkcji DATA – dzień. To on jest zmienny w dacie (miesiąc i rok pozostają takie, jak wprowadziliśmy na formatce). Stąd też nawias klamerkowy naokoło numerów dni – te klamerki musimy wstawić samodzielnie.
A oto wynik formuły:
Jak działa formuła?
- Formuła najpierw podstawia odpowiednie argumenty do funkcji DATA (tutaj ten tablicowy element).
- Następnie sprawdza jakim dniem tygodnia jest dana data (za pomocą funkcji DZIEŃ.TYG).
- Potem funkcją JEŻELI porównuje wynikowy dzień tygodnia do dnia wskazanego w formatce (czwartek). Jeśli jest taki sam – zwraca tę datę, jeśli nie – 0 (zero).
- Dalej funkcja MAX, która dostała do sprawdzenia tablicę z wynikami funkcji JEŻELI, wybiera największą wartość, czyli naszą datę.
- Na końcu jeszcze dodawana jest wielokrotność, gdybyśmy chcieli wyświetlić przykładowo drugi czwartek miesiąca (kolejny czwartek jest zawsze o ileś siódemek większy niż pierwszy).
Trochę to zawiłe, ale działa. Przekonajcie się sami i koniecznie dajcie znać w komentarzach! 🙂
Plik do pobrania:
I wersja wideo:
Redakcja językowa: Aleksandra Wasiak
www.kulturajezyka.pl
Bardzo ciekawy artykuł. Napisz coś więcej jak działa ta formuła tablicowa (czyli te klamerki) bo jakoś nie mogę tego złapać
Malinko, masz prawdziwy talent do rozwiązywania łamigłówek za pomocą Excela. Chylę czoła!