Załącznik z przykładami dla tego rozdziału znajduje się w tym miejscu.
Jak już wspomnieliśmy, deklarowanie funkcji odbywa się poprzez użycie słowa kluczowego "Function" i następnie nazwania jej, po czy w nawiasie można podać argumenty takiej funkcji.
Załóżmy, że chcielibyśmy zadeklarować funkcję, wynikiem której będzie maksymalna wartość w podanym zakresie, przy spełnieniu określonego warunku. Innymi słowy funkcja taka będzie działać podobnie jak wbudowana funkcja Excela SUMA.JEŻELI, tylko będzie szukać maksymalnej wartości dla danego warunku. Definicja mogłaby być np. taka:
Function MAX_JEZELI(kryteria As Range, warunek As String, zakres As Range)
Dim licznik As Long
licznik = 1
For licznik = 1 To kryteria.Count
If kryteria.Item(licznik) = warunek Then
MAX_JEZELI = zakres.Item(licznik)
GoTo sprawdz
Else
MAX_JEZELI = "Brak podanego warunku"
End If
Next licznik
sprawdz:
For licznik = licznik + 1 To kryteria.Count
If kryteria.Item(licznik) = warunek And zakres.Item(licznik) > MAX_JEZELI Then
MAX_JEZELI = zakres.Item(licznik)
End If
Next licznik
End Function
Na jej wstępie zdefiniowaliśmy, iż nazywać się będzie MAX_JEZELI. Nasza funkcja będzie zawierała trzy argumenty:- kryteria - podane jako zakres w którym będzie szukany warunek,
- warunek - warunek, o ile zostanie spełniony - będzie brany pod uwagę dany wiersz lub kolumna,
- zakres - zakres danych, z których będzie szukane maksimum dla tych elementów na poziomie których jest spełniony warunek.
W kolejnych krokach dokonujemy już tylko przypisania do licznika (którego zadaniem będzie prześledzenie zakresu z kryteriami) wartości równej 1 i rozpoczęcie przeszukiwania pierwszego wystąpienia warunku (pierwsza pętla For). Po jego wystąpieniu, następuje przejście do etykiety kodu nazwanej "sprawdź:" w celu sprawdzenia kolejnych elementów tablic i tam gdzie podany warunek jest spełniony, a dodatkowo wartość z zakresu jest większa od obecnej, zostaje ona przypisana do funkcji. Spójrzmy może na poniższy obraz, wykorzystujący napisaną funkcję:
Przeszukujemy zakres A3:A25 w celu odnalezienia wierszy, które zawierają warunek podany w komórce B1, następnie wynikiem tej funkcji stanie się taka wartość, która dla wiersza odpowiadającego warunkowi jest jednocześnie największą. Mówiąc obrazowo: nasz przykład szuka w zakresie podanym jako kryteria liczby 3. Po znalezieniu pierwszej z nich (w komórce A5, czyli w trzecim elemencie zakresu A3:A25), przypisuje tę wartość do funkcji i przechodzi do kolejnej pętli For w celu przeszukania czy ta wartość występuje gdzieś jeszcze (zauważmy, że druga pętla rozpoczyna się od wiersza elementu następującego po tym, w którym znalezione zostało pierwsze wystąpienie). Sprawdzając kolejne elementy używa instrukcji warunkowej, która pyta, czy warunek jest spełniony oraz czy wartość w jego wierszu jest większa od obecnej - jeśli tak, to zmienia wynik funkcji, jeśli nie - przechodzi dalej.
Zauważmy, że w przypadku nie odnalezienia warunku w żadnej z podanego zakresu kryteriów, funkcja zwróci tekst "Brak podanego warunku" - odpowiedni warunek pełni rolę obsługi błędów w naszej prostej funkcji.
Polecam czytelnikowi pobranie pliku z przykładem i spokojne prześledzenie zawartego kodu - jest to zdecydowanie najlepsza metoda prawidłowego zrozumienia logiki zastosowanej w opisywanym przykładzie.