Jak to nie pisał kiedyś jeden z moich kolegów z Excelforum: „Zacznij od (Walken)Bacha” .
O Funkcji Uniwersalnej
Podpisuję się pod tymi słowami obiema rękami, bo książki tego autora to świetne wprowadzenie do tematyki VBA.
W publikacji dotyczącej programowania w Excelu, spodobał mi się przykład pokazujący działanie funkcji uniwersalnej. Pamiętam, że pierwszym argumentem funkcji był zakres komórek, drugim zaś cyfra. W zależności od podanej cyfry funkcja wykonywała konkretną operację matematyczną (sumowanie, zliczenie liczb, wyliczenie średniej itp.). Takie rozwiązanie jest bardzo wygodne, ponieważ nie musimy tworzyć kilku podobnych funkcji, wystarczy jedna.
Przyznam szczerze, że często korzystam z tego patentu, zwłaszcza wtedy, gdy mogę wyciągnąć wiele istotnych danych z jednej informacji.
Wydobycie Informacji z Daty
Poniższy przykład pokazuje, jak w prosty sposób wydobyć kilka ciekawych informacji na podstawie daty.
Funkcja może zwracać w wyniku liczbę, tekst, datę lub nawet błąd – w zależności od wartości argumentu. Argument może być podany w formie liczbowej lub słownej.
Kod Funkcji
Public Function vDataInfo(ByVal dtData As Date, _
Optional ByVal vInfo As Variant = 0) As Variant
1 Select Case vInfo
Case 0, "data"
2 vDataInfo = dtData ' Zwraca wartość pierwszego argumentu
3 Case 1, "miesiąc_słownie"
4 vDataInfo = Format$(dtData, "mmmm") ' Pełna nazwa miesiąca np. grudzień
5 Case 2, "dzień_słownie"
6 vDataInfo = Format$(dtData, "dddd") ' Pełna nazwa dnia np. czwartek
7 Case 3, "dzień_tygodnia"
8 vDataInfo = CInt(Format$(dtData, "w") - 1) ' Numer dnia tygodnia, licząc od poniedziałku
9 Case 4, "dzień_roku"
10 vDataInfo = CInt(Format$(dtData, "y")) ' Dzień roku
11 Case 5, "tydzień_roku"
12 vDataInfo = CInt(Format$(dtData, "ww")) ' Tydzień w roku
13 Case 6, "kwartał"
14 vDataInfo = CInt(Format$(dtData, "q")) ' Kwartał
15 Case Else
16 vDataInfo = CVErr(xlErrValue)
17 End Select
End Function