Samouczek funkcji Excel VBA: Return, Call, Przykłady

⚡ Inteligentne podsumowanie

Funkcja VBA w Excelu to blok kodu, który wykonuje zadanie i zwraca wynik do obiektu, który go wywołał. Ta strona omawia składnię deklaracji, zwracanie wartości, przykład dodawania z obliczeniami oraz używanie funkcji w komórce arkusza kalkulacyjnego.

  • 🎯 Definicja: Funkcja wykonuje okreĹ›lone zadanie i zwraca pojedynczy wynik do kodu wywoĹ‚ujÄ…cego.
  • đź§ľ SkĹ‚adnia: Nazwa funkcji (argumenty) Jako Type otwiera blok, a End Function go zamyka.
  • ↩️ Zwracanie wartoĹ›ci: Przypisz wynik do nazwy funkcji, jak w addNumbers = pierwszaLiczba + drugaLiczba.
  • 🔢 Typ zwrotu: Deklarowanie jako dĹ‚ugie lub jako Double unika wolniejszej domyĹ›lnej wersji.
  • 🖱️. PowoĹ‚anie: Przycisk polecenia przekazuje dwie liczby i wyĹ›wietla zwrĂłconÄ… sumÄ™ w oknie komunikatu.
  • 📊 Zastosowanie arkusza: Funkcja publiczna w module standardowym staje siÄ™ zdefiniowanÄ… przez uĹĽytkownika formułą w dowolnej komĂłrce.

Funkcja VBA w programie Excel

Co to jest funkcja?

Funkcja to fragment kodu, który wykonuje określone zadanie i zwraca wynik. Funkcje są najczęściej używane do wykonywania powtarzalnych zadań, takich jak formatowanie danych wyjściowych, wykonywanie obliczeń itp.

Załóżmy, że jesteś rozwijanyping Program obliczający odsetki od pożyczki. Możesz utworzyć funkcję, która akceptuje kwotę pożyczki i okres spłaty. Funkcja może następnie wykorzystać kwotę pożyczki i okres spłaty do obliczenia odsetek i zwrócenia ich wartości.

Po co używać funkcji

Zalety korzystania z funkcji są takie same, jak w przypadku podprogramów: dzielą długi program na łatwe do opanowania części, można je ponownie wykorzystać w dowolnym miejscu projektu, a opisowa nazwa dokumentuje działanie kodu. Samouczek podprogramów VBA w programie Excel pokrywa te świadczenia w całości.

Zasady nazewnictwa funkcji

Zasady nazewnictwa są identyczne jak w przypadku podprogramów. Nazwa funkcji nie może zawierać spacji, musi zaczynać się od litery lub znaku podkreślenia i nie może być zarezerwowana. VBA słowa kluczowego, takiego jak Funkcja, Prywatne lub Koniec.

Składnia VBA do deklarowania funkcji

Private Function myFunction (ByVal arg1 As Integer, ByVal arg2 As Integer)
    myFunction = arg1 + arg2
End Function

TUTAJ w składni,

Code Działania
  • „Funkcja prywatna myFunction(…)”
  • Tutaj sĹ‚owo kluczowe „Function” sĹ‚uĹĽy do deklarowania funkcji o nazwie „myFunction” i uruchamiania treĹ›ci funkcji.
  • SĹ‚owo kluczowe „Prywatne” sĹ‚uĹĽy do okreĹ›lenia zakresu funkcji
  • „ByVal arg1 jako liczba caĹ‚kowita, ByVal arg2 jako liczba caĹ‚kowita”
  • Deklaruje dwa parametry typu danych caĹ‚kowitych o nazwach „arg1” i „arg2”.
  • mojaFunkcja = arg1 + arg2
  • ocenia wyraĹĽenie arg1 + arg2 i przypisuje wynik do nazwy funkcji.
  • „Funkcja koĹ„cowa”
  • „ZakoĹ„cz funkcję” sĹ‚uĹĽy do zakoĹ„czenia ciaĹ‚a funkcji

Jak zwrócić wartość i ustawić typ danych funkcji

Funkcja ma jedno zadanie, którego nie ma podprogram: zwraca wartość. Kontrolują ją dwa szczegóły, które łatwo przeoczyć.

Pierwszym jest przypisanie. VBA nie ma instrukcji Return. Zamiast tego przypisujesz wynik do nazwy funkcji, dlatego linia brzmi: mojaFunkcja = arg1 + arg2Jeśli to zadanie nigdy nie zostanie wykonane, funkcja po cichu zwróci pustą wartość zamiast zgłosić błąd, więc każda gałąź kodu musi ją ustawić.

Drugim jest typ zwracany. Powyższa deklaracja kończy się na nawiasie zamykającym, więc funkcja zwraca typ Variant. Dodanie klauzuli As po nawiasach ustala typ, co jest szybsze, zużywa mniej pamięci i pozwala kompilatorowi wykryć niezgodność.

Deklaracja Zwroty Kiedy go używać
Funkcja f(x As Long) Wariant Tylko wtedy, gdy typ wyniku jest naprawdę różny
Funkcja f(x As Long) As Long długo Liczby całkowite, takie jak liczba elementów i numery wierszy
Funkcja f(x As Long) As Double Double Jakiekolwiek obliczenia generujące liczby dziesiętne
Funkcja f(x As Long) As String sznur Zwrócono sformatowany tekst do wyświetlenia
Funkcja f(x As Long) As Boolean Boolean Kontrola poprawności odpowiedzi „prawda” lub „fałsz”

💡 Wskazówka: Użyj funkcji Exit Function, aby wyjść wcześniej po ustawieniu wartości zwracanej, w taki sam sposób, w jaki Exit Sub wychodzi z podprogramu.

Funkcja zademonstrowana na przykładzie:

Funkcje są bardzo podobne do podprogramu. Główną różnicą między podprogramem a funkcją jest to, że funkcja zwraca wartość, gdy jest wywoływana. Podczas gdy podprogram nie zwraca wartości, gdy jest wywoływany. Powiedzmy, że chcesz dodać dwie liczby. Możesz utworzyć funkcję, która akceptuje dwie liczby i zwraca sumę liczb.

  1. UtwĂłrz interfejs uĹĽytkownika
  2. Dodaj funkcjÄ™
  3. Napisz kod przycisku polecenia
  4. Przetestuj kod

Krok 1) Interfejs uĹĽytkownika

Dodaj przycisk polecenia do arkusza, jak pokazano poniĹĽej

Funkcje i podprogramy VBA

Ustaw następujące właściwości CommandButton1 na następujące.

S / N Control: Właściwość Wartość:
1 Przycisk Polecenia1 ImiÄ™ i nazwisko btnDodajNumbers
2 Podpis Dodaj Numbers Funkcjonować

Twój interfejs powinien teraz wyglądać następująco

Funkcje i podprogramy VBA

Krok 2) Kod funkcji.

  1. Naciśnij Alt + F11, aby otworzyć okno kodu
  2. Dodaj następujący kod
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer)
    addNumbers = firstNumber + secondNumber
End Function

TUTAJ w kodzie,

Code Działania
  • „Dodaj funkcjÄ™ prywatnÄ…Numbers(...) "
  • Deklaruje prywatnÄ… funkcjÄ™ „addNumbers”, ktĂłry akceptuje dwa parametry caĹ‚kowite.
  • „ByVal FirstNumber jako liczba caĹ‚kowita, ByVal secondNumber jako liczba caĹ‚kowita”
  • Deklaruje dwie zmienne parametryczne firstNumber i secondNumber
  • "dodaćNumbers = pierwszy numer + drugi numer”
  • Dodaje wartoĹ›ci FirstNumber i SecondNumber i przypisuje sumÄ™ do dodaniaNumbers.

Krok 3) Napisz Code który wywołuje funkcję

  1. Kliknij prawym przyciskiem myszy przycisk DodajNumbers przycisk polecenia
  2. Wybierz Widok Code
  3. Dodaj następujący kod
Private Sub btnAddNumbers_Click()
    MsgBox addNumbers(2, 3)
End Sub

TUTAJ w kodzie,

Code Działania
„WiadomośćBox DodajNumbers(2,3) ”
  • WywoĹ‚uje funkcjÄ™ dodajNumbers i przekazuje 2 i 3 jako parametry. Funkcja zwraca sumÄ™ dwĂłch liczb pięć (5)

Krok 4) Uruchom program, otrzymasz następujące wyniki

Funkcje i podprogramy VBA

Pobierz Excel zawierajÄ…cy powyĹĽszy kod

Pobierz powyĹĽszy plik Excel Code

Przycisk powyżej wywołuje funkcję z kodu VBA. Funkcję można również wywołać z samego arkusza kalkulacyjnego, bez użycia żadnego przycisku.

Jak używać funkcji VBA w komórce arkusza kalkulacyjnego

Funkcję napisaną w VBA można wpisać do komórki dokładnie tak samo, jak SUMA lub WYSZUKAJ.PIONOWO. W Excelu nazywa się to funkcją zdefiniowaną przez użytkownika, czyli UDF, i to właśnie dlatego wiele osób uczy się funkcji przed podprogramami. Muszą być spełnione trzy warunki.

  • Umieść go w standardowym module: Wstaw, ModuĹ‚ w edytorze. Funkcja zapisana za arkuszem kalkulacyjnym lub w ThisWorkbook nie jest widoczna na pasku formuĹ‚.
  • OgĹ‚oĹ› to jako publiczne: W powyĹĽszym przykĹ‚adzie uĹĽyto sĹ‚owa kluczowego „Prywatne”, ktĂłre ukrywa je w programie Excel. DomyĹ›lnie jest to „Publiczne”, wiÄ™c wystarczy usunąć sĹ‚owo kluczowe.
  • Zwróć wartość, niczego nie zmieniaj: Funkcja UDF nie moĹĽe formatować komĂłrek, usuwać wierszy ani zapisywać danych w innej komĂłrce. Program Excel blokuje te dziaĹ‚ania, a komĂłrka wyĹ›wietla komunikat #VALUE!.

Poniższa funkcja konwertuje temperaturę i można jej używać w dowolnym miejscu arkusza.

Public Function CelsiusToF(ByVal Celsius As Double) As Double
    CelsiusToF = (Celsius * 9 / 5) + 32
End Function

Zapisz skoroszyt jako plik .xlsm z włączoną obsługą makr, a następnie wpisz =CelsjuszaDoF(A1) do dowolnej komórki. Wynik jest aktualizowany przy każdej zmianie komórki A1, a nazwa pojawia się na liście autouzupełniania formuł w kategorii Zdefiniowane przez użytkownika. Ponieważ skoroszyt zawiera teraz makra, każdy, kto go otwiera, musi włączyć zawartość, zanim formuła zwróci wartość zamiast #NAME?.

Typowe błędy funkcji VBA i jak je naprawić

Cztery problemy wyjaśniają większość sytuacji, w których funkcje kompilują się, ale zwracają błędną odpowiedź.

  • Funkcja zwraca wartość Empty lub 0: Wynik nigdy nie zostaĹ‚ przypisany do nazwy funkcji lub jedna z gałęzi instrukcji If pomija przypisanie. Ustaw wartość zwracanÄ… dla kaĹĽdej Ĺ›cieĹĽki.
  • #NAZWA? w komĂłrce arkusza kalkulacyjnego: Funkcja jest prywatna, znajduje siÄ™ w module arkusza, a nie w module standardowym, lub skoroszyt zostaĹ‚ zapisany bez włączonych makr.
  • PrzepeĹ‚nienie argumentami caĹ‚kowitymi: W przykĹ‚adzie uĹĽyto As Integer, ktĂłry zatrzymuje siÄ™ na 32 767. ZmieĹ„ oba parametry i typ zwracany na Long dla dowolnych danych rzeczywistych.
  • Zmieniony argument zaskakuje dzwoniÄ…cego: PominiÄ™cie ByVal powoduje, ĹĽe VBA przekazuje samÄ… zmiennÄ…, dziÄ™ki czemu funkcja moĹĽe zmienić wartość wywoĹ‚ujÄ…cego. UĹĽyj ByVal, chyba ĹĽe chcesz uzyskać taki efekt.

FAQ

Nie bezpośrednio. Zwróć tablicę lub niestandardowy typ, aby przenieść kilka wartości w jednym wyniku, lub zadeklaruj dodatkowe parametry ByRef, aby funkcja zapisywała z powrotem do zmiennych wywołującego.

Dodaj słowo kluczowe Optional z wartością domyślną, jak w przypadku Optional ByVal Rate As Double = 0.05. Każdy parametr następujący po parametrze opcjonalnym musi być również opcjonalny i musi znajdować się na końcu listy.

Tak, poprzez Application.WorksheetFunction, na przykład Application.WorksheetFunction.Sum(Range(“A1:A10”)). Funkcje, które VBA już udostępnia, takie jak Left czy Trim, są wywoływane bezpośrednio, bez tego prefiksu.

Tak. Wklej formułę arkusza kalkulacyjnego, a asystent AI zwróci równoważną funkcję publiczną z nazwanymi argumentami i zadeklarowanym typem zwracanym. Porównaj oba wyniki w przykładowych wierszach przed zastąpieniem formuły.

Tak. Podaj funkcję i formułę, a asystent AI wskaże przyczyny, takie jak niezgodność typu argumentu, brak przypisania zwracanego wyniku lub próba zmiany komórki z poziomu funkcji zdefiniowanej przez użytkownika.

Podsumuj ten post następująco: