Tworzenie funkcji w Excel VBA – Funkcje użytkownika

1. Wprowadzenie do funkcji użytkownika VBA

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 – Jak napisać funkcję w VBA Excel?

Stwórzmy prostą funkcję użytkownika. Utwórzmy nowy moduł w Edytorze VisualBasic. Funkcja 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 widzisz najprostsza postać funkcji użytkownika wygląda następująco:

Function NazwaFunkcji([agrumenty])
instrukcje
End Function

Zauważ, że 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 naszego 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 VBA - Funkcje Użytkownika
Kurs Excel VBA – Tworzenie własnych funkcji VBA – 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łasnych 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 VBA

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 – Jak debugować funkcje w VBA?

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 VBA
Kurs Excel VBA - Tworzenie własnych funkcji VBA - Funkcje Użytkownika
Kurs Excel VBA – Tworzenie własnych funkcji VBA – Funkcje Użytkownika

5. Tworzenie własnych funkcji VBA – Zadania (Rozwiązanie możesz wpisać w komentarzu)

5.1. Napisz funkcję zamieniającą numer PESEL na datę urodzenia. Warunki takiej funkcji możesz sprawdzić w tym artykule.

5.2. Utwórz funkcję zliczającą dni pozostałe do końca bieżącego roku.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

12 komentarzy “Tworzenie funkcji w Excel VBA – Funkcje użytkownika”