Tutorial zu Excel-VBA-Funktionen: Rückgabe, Aufruf, Beispiele
⚡ Intelligente Zusammenfassung
Eine Excel-VBA-Funktion ist ein Codeblock, der eine Aufgabe ausführt und ein Ergebnis an den Aufrufer zurückgibt. Diese Seite behandelt die Deklarationssyntax, die Rückgabe eines Wertes, ein durchgerechnetes Additionsbeispiel und die Verwendung einer Funktion in einer Tabellenzelle.

Was ist eine Funktion?
Eine Funktion ist ein Codeteil, der eine bestimmte Aufgabe ausführt und ein Ergebnis zurückgibt. Funktionen werden meist zum Ausführen sich wiederholender Aufgaben verwendet, z. B. zum Formatieren von Daten für die Ausgabe, zum Durchführen von Berechnungen usw.
Angenommen, Sie entwickelnping Ein Programm, das die Zinsen für ein Darlehen berechnet. Sie können eine Funktion erstellen, die den Darlehensbetrag und die Rückzahlungsfrist entgegennimmt. Die Funktion kann dann anhand des Darlehensbetrags und der Rückzahlungsfrist die Zinsen berechnen und den Wert zurückgeben.
Warum Funktionen verwenden?
Die Vorteile der Verwendung von Funktionen sind dieselben wie die für Unterprogramme: Sie zerlegen ein langes Programm in überschaubare Teile, sie können an beliebiger Stelle im Projekt wiederverwendet werden, und ein beschreibender Name dokumentiert die Funktion des Codes. Excel VBA-Subroutine-Tutorial Diese Leistungen sind vollständig abgedeckt.
Regeln zur Benennung von Funktionen
Die Namensregeln sind identisch mit denen für Unterprogramme. Ein Funktionsname darf kein Leerzeichen enthalten, muss mit einem Buchstaben oder einem Unterstrich beginnen und darf kein reservierter Begriff sein. VBA Schlüsselwörter wie Funktion, Privat oder Ende.
VBA-Syntax zum Deklarieren einer Funktion
Private Function myFunction (ByVal arg1 As Integer, ByVal arg2 As Integer) myFunction = arg1 + arg2 End Function
HIER in der Syntax,
| Code | Action |
|---|---|
|
|
|
|
|
|
|
|
Wie man einen Wert zurückgibt und den Datentyp der Funktion festlegt
Eine Funktion hat eine Aufgabe, die eine Unterroutine nicht hat: Sie gibt einen Wert zurück. Zwei Details bestimmen diesen Wert, und beide werden leicht übersehen.
Das erste ist die Zuweisung. VBA kennt keine Return-Anweisung. Stattdessen wird das Ergebnis dem Funktionsnamen selbst zugewiesen, weshalb die Zeile so aussieht: meineFunktion = arg1 + arg2Wenn diese Zuweisung nie ausgeführt wird, gibt die Funktion stillschweigend einen leeren Wert zurück, anstatt einen Fehler auszulösen, sodass jeder Zweig des Codes ihn setzen muss.
Das zweite Merkmal ist der Rückgabetyp. Die obige Deklaration endet mit der schließenden Klammer, daher gibt die Funktion einen Variant zurück. Durch Hinzufügen einer As-Klausel nach den Klammern wird der Typ festgelegt, was schneller ist, weniger Speicher benötigt und dem Compiler ermöglicht, einen Typkonflikt zu erkennen.
| Erklärung | Rücksendungen | Wann man es benutzt |
|---|---|---|
| Funktion f(x As Long) | Variante | Nur wenn sich der Ergebnistyp tatsächlich ändert |
| Funktion f(x As Long) As Long | lang | Ganze Zahlen wie Zählwerte und Zeilennummern |
| Funktion f(x As Long) As Double | Double | Jede Berechnung, die Dezimalzahlen erzeugt |
| Funktion f(x As Long) As String | Schnur | Formatierter Text zur Anzeige zurückgegeben |
| Funktion f(x As Long) As Boolean | Boolean | Eine Validierungsprüfung, die mit „wahr“ oder „falsch“ antwortet. |
💡 Tipp: Verwenden Sie Exit Function, um die Unterroutine vorzeitig zu verlassen, sobald der Rückgabewert festgelegt ist, analog zur Vorgehensweise von Exit Sub, mit der eine Unterroutine verlassen wird.
Funktion am Beispiel demonstriert:
Funktionen sind Subroutinen sehr ähnlich. Der Hauptunterschied zwischen einer Subroutine und einer Funktion besteht darin, dass die Funktion beim Aufruf einen Wert zurückgibt. Eine Subroutine hingegen gibt beim Aufruf keinen Wert zurück. Angenommen, Sie möchten zwei Zahlen addieren. Sie können eine Funktion erstellen, die zwei Zahlen akzeptiert und die Summe der Zahlen zurückgibt.
- Erstellen Sie die Benutzeroberfläche
- Fügen Sie die Funktion hinzu
- Schreiben Sie Code für die Befehlsschaltfläche
- Testen Sie den Code
Schritt 1) Benutzeroberfläche
Fügen Sie dem Arbeitsblatt eine Befehlsschaltfläche hinzu, wie unten gezeigt
Legen Sie die folgenden Eigenschaften von CommandButton1 wie folgt fest.
| S / N | Kontrolle | Eigenschaft | Wert |
|---|---|---|---|
| 1 | Befehlsschaltfläche1 | Name | btnAddNumbers |
| 2 | Bildunterschrift | Speichern Numbers Funktion |
Ihre Oberfläche sollte nun wie folgt aussehen
Schritt 2) Funktionscode.
- Drücken Sie Alt + F11, um das Codefenster zu öffnen
- Fügen Sie den folgenden Code hinzu
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer) addNumbers = firstNumber + secondNumber End Function
HIER im Code,
| Code | Action |
|---|---|
|
|
|
|
|
|
Schritt 3) Schreiben Code die die Funktion aufruft
- Klicken Sie mit der rechten Maustaste auf die Schaltfläche „Hinzufügen“.Numbers Befehlsschaltfläche
- Wählen Sie „Ansicht“. Code
- Fügen Sie den folgenden Code hinzu
Private Sub btnAddNumbers_Click() MsgBox addNumbers(2, 3) End Sub
HIER im Code,
| Code | Action |
|---|---|
| "NachrichtBox hinzufügenNumbers(2,3) |
|
Schritt 4) Führen Sie das Programm aus. Sie erhalten die folgenden Ergebnisse
Laden Sie Excel herunter, das den obigen Code enthält
Laden Sie die obige Excel-Datei herunter. Code
Die Schaltfläche oben ruft die Funktion aus dem VBA-Code auf. Eine Funktion kann aber auch direkt aus dem Arbeitsblatt aufgerufen werden, ganz ohne Schaltfläche.
Wie man eine VBA-Funktion in einer Tabellenzelle verwendet
Eine in VBA geschriebene Funktion kann wie SUMME oder SVERWEIS in eine Zelle eingegeben werden. Excel nennt dies eine benutzerdefinierte Funktion (UDF), und dies ist der Grund, warum viele Anwender Funktionen vor Unterprogrammen lernen. Drei Bedingungen müssen erfüllt sein.
- Platzieren Sie es in einem Standardmodul: Fügen Sie im Editor „Modul“ ein. Eine Funktion, die hinter einem Arbeitsblatt oder in „DieseArbeitsmappe“ gespeichert ist, ist in der Bearbeitungsleiste nicht sichtbar.
- Erklären Sie es für öffentlich: Im obigen Beispiel wird „Private“ verwendet, wodurch die Daten in Excel verborgen bleiben. „Public“ ist die Standardeinstellung, daher genügt es, das Schlüsselwort einfach zu entfernen.
- Gibt einen Wert zurück, ändert aber nichts: Eine benutzerdefinierte Funktion (UDF) kann keine Zellen formatieren, Zeilen löschen oder in eine andere Zelle schreiben. Excel blockiert diese Aktionen, und die Zelle zeigt den Fehlerwert #WERT! an.
Die unten stehende Funktion wandelt eine Temperatur um und kann an beliebiger Stelle im Tabellenblatt verwendet werden.
Public Function CelsiusToF(ByVal Celsius As Double) As Double CelsiusToF = (Celsius * 9 / 5) + 32 End Function
Speichern Sie die Arbeitsmappe als eine Makro-fähige .xlsm-Datei und geben Sie dann Folgendes ein: =CelsiusToF(A1) in eine beliebige Zelle. Das Ergebnis wird aktualisiert, sobald sich A1 ändert, und der Name erscheint in der Formel-Autovervollständigungsliste unter der Kategorie „Benutzerdefiniert“. Da die Arbeitsmappe nun Makros enthält, muss jeder, der sie öffnet, Inhalte aktivieren, bevor die Formel einen Wert anstelle von #NAME? zurückgibt.
Häufige VBA-Funktionsfehler und wie man sie behebt
Vier Probleme sind für die meisten Funktionen verantwortlich, die zwar kompilieren, aber das falsche Ergebnis liefern.
- Die Funktion gibt entweder „Leer“ oder „0“ zurück: Das Ergebnis wurde der Funktion nie zugewiesen, oder ein Zweig einer If-Anweisung überspringt die Zuweisung. Setzen Sie den Rückgabewert in jedem Pfad.
- #NAME? in einer Tabellenzelle: Die Funktion ist privat, befindet sich in einem Tabellenmodul anstatt in einem Standardmodul, oder die Arbeitsmappe wurde ohne aktivierte Makros gespeichert.
- Überlauf bei Integer-Argumenten: Das Beispiel verwendet den Datentyp „As Integer“, der bei 32,767 endet. Ändern Sie beide Parameter und den Rückgabetyp in „Long“, um echte Daten zu verwenden.
- Ein geändertes Argument überrascht den Anrufer: Lässt man `ByVal` weg, übergibt VBA die Variable selbst, sodass die Funktion den Wert des Aufrufers verändern kann. Verwenden Sie `ByVal` nur, wenn dieser Effekt gewünscht ist.



