Dziś krótka odpowiedź na pytanie- jak pobrać datę odpowiadającą ostatniemu dniu miesiąca z pominięciem weekendu? Jeżeli ostatni dzień miesiąca wypada w sobotę lub niedzielę naszym celem będzie otrzymanie daty odpowiadającej piątkowi poprzedzającemu ten weekend. Poniżej gotowe rozwiązanie w postaci funkcji UDF.
01 | Public Function EndOfBusinessMonth(RefDate) As Date |
05 | LastDay = DateSerial(Year(RefDate), Month(RefDate) + 1, 0) |
07 | Select Case Weekday(LastDay) |
09 | EndOfBusinessMonth = DateAdd( "d" , -2, LastDay) |
11 | EndOfBusinessMonth = DateAdd( "d" , -1, LastDay) |
13 | EndOfBusinessMonth = LastDay |
Proszę też zwrócić uwagę na ten zapis:
1 | LastDay = DateSerial(Year(RefDate), Month(RefDate) + 1, 0) |
którego celem jest zwrócenie daty ostatniego dnia miesiąca (poprzedniego).
Warto przy okazji też podkreślić, że funkcja DateSerial() jest funkcją bardzo elastyczną, która umożliwia wprowadzenie ilości miesięcy spoza przedziału 1-12 co powoduje automatyczną konwersję na odpowiedni miesiąc dokonując przejścia przez kolejne lata (mniejsze od 0- lata wcześniejsze, większe od 12- lata późniejsze). Podobnie kwestia wygląda w zakresie dni, gdzie dopuszczalne są wartości spoza przedziału 1-31, a czego przykład widać w powyższej funkcji.