Tworzenie funkcji w Excel VBA – Funkcje użytkownika

Kurs Excel VBA - Tworzenie funkcji w Excel VBA - Funkcje użytkownika

Kurs Excel VBA – Funkcje Użytkownika

1. Wprowadzenie do funkcji użytkownika

Zarówno Excel jak i VBA oferują nam szereg użytecznych funkcji. Co jednak, jeśli chcielibyśmy samodzielnie stworzyć funkcję, z której będziemy korzystali w Excelu? Z pomocą przychodzi nam możliwość tworzenia tzw. funkcji użytkownika. Są to funkcje, których kod źródłowy piszemy sami. Możemy z nich korzystać zarówno w kodzie VBA jak i w arkuszu Excela.

2. Najprostsza funkcja użytkownika

Stwórzmy prostą funkcję użytkownika. Utwórzmy nowy moduł w Edytorze VisualBasic. Funkcja dla przykładu ma zwracać tekst „To jest wynik funkcji” i nie wymaga argumentów. Najprostszy przykład takiej funkcji zamieszczam poniżej:

Function MojaFunkcja()
MojaFunkcja = "To jest wynik funkcji"
End Function

Jak możemy zaobserwować najprostsza postać funkcji użytkownika wygląda następująco:

Function NazwaFunkcji([agrumenty])
instrukcje
End Function

Należy zaznaczyć, iż obecność argumentów nie jest obowiązkowa. Dla przykładu funkcja arkuszowa DZIŚ() także nie posiada argumentów, które moglibyśmy wpisać z poziomu arkusza danych. Najważniejsze, co należy zapamiętać z powyższego schematu, to odniesienie do zmiennej „MojaFunkcja” w instrukcjach. Jest to wynik zwracany przez naszą funkcję. Nazwa zmiennej odpowiada nazwie funkcji. Możemy to porównać do instrukcji Return w innych językach programowania. Z funkcji użytkownika korzystamy analogicznie jak w przypadku każdej innej funkcji. Możemy więc z niej skorzystać zarówno w kodzie VBA jak i w Arkuszu po wprowadzeniu nazwy naszej funkcji.

Kurs Excel VBA - Tworzenie własnych funkcji - Funkcje Użytkownika

Kurs Excel VBA – Tworzenie własnych funkcji – Funkcje Użytkownika

Kurs Excel VBA - Tworzenie własnych funkcji - Funkcje Użytkownika

Kurs Excel VBA – Tworzenie własnych funkcji – Funkcje Użytkownika

3. Argumenty i zaawansowany schemat funkcji

Powyższy schemat funkcji nie określa argumentów jak i typów danych. Jak wiemy zarówno argumenty, jak i wynik zwracany przez funkcje posiadają swoje typy danych. Jeśli ich nie określimy, przyjmą one typ danych Variant. Więcej o typach danych możesz przeczytać w tej części kursu. Bardziej zaawansowany schemat budowy własne funkcji w Excel VBA wygląda następująco:

 [Poziom deklaracji] Function NazwaFunkcji([argument1 as typ_danych, argument2 as typ_danych...]) as zwracany_typ_danych 
[blok instrukcji] 
End Function
  • Poziom deklaracji, a więc zadeklarowania w obrębie jakiego zakresu projektu VBA nasza funkcja działa. Jeśli chcemy, by funkcja  mogła być wykorzystywana zarówno w arkuszu, jak i w każdym napisanym przez nas kodzie VBA zalecany jest tutaj poziom Public. Jeśli chcemy, by funkcja działała w arkuszu i w obrębie modułu – stosujemy poziom Private. Więcej na temat poziomów deklaracji możesz dowiedzieć się z tego artykułu.
  • Określamy nazwą argumenty, a więc wartości, które funkcja będzie przerabiała. Określamy także typy danych argumentów, w przeciwnym wypadku argumenty przyjmą typ Variant.
  • Na koniec powinniśmy określić typ danych dla wartości zwracanych przez funkcję. Jeśli tego nie zrobimy automatycznie będzie to typ Variant. Przy tworzeniu dużych funkcji, które eksploatują znacząco zasoby naszego komputera zalecane jest określenie typów danych. Więcej na temat typów danych pisałem w tej części kursu.

Stwórzmy teraz nową funkcję. Nasza funkcja powinna przyjmować 2 argumenty tekstowe: imię i nazwisko. Wynikiem funkcji powinny być inicjały pisane wielkimi literami stworzone z argumentów. Sam wynik powinien zwracać wartość także w typie danych tekstowych String. Naszą funkcję nazwijmy „INICJALY”. Funkcję zadeklarujmy na poziomie Public:

Public Function INICJALY(imie As String, nazwisko As String) As String
INICJALY = UCase(Left(imie, 1) & Left(nazwisko, 1))
End Function

 

Kurs Excel VBA - Tworzenie własnych funkcji - Funkcje Użytkownika

Kurs Excel VBA – Tworzenie własnych funkcji – Funkcje Użytkownika

W naszej nowej funkcji wyciągnęliśmy pierwsze litery imienia i nazwiska za pomocą funkcji LEFT(). Teksty łączymy ze sobą za pomocą operatora „&”. Następnie za pomocą funkcji VBA UCase zamieniamy litery inicjałów na litery wielkie.

4. Debugowanie funkcji

By sprawdzić, czy nasza funkcja działa w sposób poprawny powinniśmy ją przetestować. Można oczywiście zrobić to po napisaniu funkcji. Jeśli jednak chcemy sprawdzić na poziomie kodu VBA, czy kod naszej funkcji nie zawiera błędów programistycznych powinniśmy skorzystać z debugowania. W Edytorze VisualBasic wybieramy zakładkę Debug, a następnie Complie VBAProject. Nieprawidłowo napisana funkcja zwróci nam błąd, jak na poniższym screenie.

Kurs Excel VBA - Tworzenie własnych funkcji - Funkcje Użytkownika

Kurs Excel VBA – Tworzenie własnych funkcji – Funkcje Użytkownika

Kurs Excel VBA - Tworzenie własnych funkcji - Funkcje Użytkownika

Kurs Excel VBA – Tworzenie własnych funkcji – Funkcje Użytkownika

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany.