Eigene Funktion mit VBA schreiben (UDF)
Wenn dir die eingebauten Excel-Funktionen nicht reichen, kannst du dir mit VBA eine eigene Funktion (User Defined Function, kurz UDF) schreiben. Sie lässt sich danach genau wie SUMME oder WENN direkt in einer Zelle eintragen.
Funktion vs. Makro
Ein Makro (Sub) führt Aktionen aus – es klickt, formatiert, speichert. Eine Funktion (Function) gibt dagegen einen Wert zurück und wird wie eine Formel in einer Zelle verwendet. Nur Function-Prozeduren stehen im Funktionsassistenten unter der Kategorie „Benutzerdefiniert" zur Verfügung.
Beispiel: Rabatt-Staffel als eigene Funktion
Angenommen, ab einer Bestellmenge von 50 Stück gibt es 10 % Rabatt, ab 100 Stück 15 %. Das lässt sich zwar auch mit WENN lösen, wird aber unübersichtlich – als Funktion bleibt es lesbar und wiederverwendbar. Öffne den VBA-Editor mit Alt+F11, füge über Einfügen → Modul ein neues Modul ein und trage ein:
Function Rabatt(Menge As Double) As Double
If Menge >= 100 Then
Rabatt = 0.15
ElseIf Menge >= 50 Then
Rabatt = 0.1
Else
Rabatt = 0
End If
End Function
Zurück in Excel rufst du die Funktion wie jede andere auf:
| A | B | |
|---|---|---|
| 1 | Menge | Rabatt |
| 2 | 30 | 0% |
| 3 | 75 | 10% |
| 4 | 150 | 15% |
=RABATT(A2) → 0%
Schritt für Schritt
- Alt+F11 öffnet den VBA-Editor.
- Rechtsklick auf die Arbeitsmappe im Projekt-Explorer → Einfügen → Modul.
- Den Code der Funktion eintippen (Copy & Paste aus dieser Seite funktioniert genauso).
- Zurück in Excel wechseln (Alt+F11) und die Funktion wie
=RABATT(A2)eintragen. - Die Datei als xlsm (makrofähige Arbeitsmappe) speichern – sonst geht der Code beim Speichern verloren.
Eine VBA-Funktion darf standardmäßig keine Zellen verändern oder andere Aktionen auslösen (z. B. Formatieren, Meldungsfenster). Sie darf nur einen Wert zurückgeben. Für Aktionen brauchst du ein Makro (Sub), das du über eine Schaltfläche oder Tastenkombination startest.
Trage einen kurzen Kommentar über die Funktion ein (Zeile beginnt mit '). So siehst du auch Monate später auf einen Blick, was die Funktion tut – wichtig, sobald mehrere eigene Funktionen in einem Modul gesammelt werden.
Häufige Fehler
- #NAME? – die Funktion ist nicht sichtbar, meist weil die Datei nicht als
.xlsmgespeichert oder Makros deaktiviert sind. - Funktion aktualisiert sich nicht – UDFs berechnen standardmäßig nur bei Änderung ihrer Argumente neu. Mit Strg+Alt+F9 erzwingst du eine komplette Neuberechnung.
- Falscher Datentyp – wird ein Parameter als
Doubledeklariert, aber Text übergeben, liefert Excel#WERT!. Datentypen im Zweifel großzügig alsVariantdeklarieren.