Informatik :: VBA :: Funktionen
Funktionen
Allgemeines
In der imperativen Programmierung sind Funktionen ein wichtiges Mittel zur
Modularisierung. Oft benötigter Code kann in Funktionen zusammengefasst werden und über den Namen der Funktion nach Bedarf aufgerufen werden.
Funktionen können einen oder mehrere Aufrufparameter haben und liefern nach ihrem Ende i.d.R. einen Funktionswert zurück.
In Excel gibt es bereits eine Vielzahl von implementierten Funktionen, die über den Funktionsassistenten fx aufgerufen weden können.
Sie sind in Kategorien eingeteilt.
So gibt es z.B. in der Kategorie Mathematik & Trigonometrie die Funktionen:
PI(), POTENZ(Basis;Exponent), RUNDEN(Zahl;Anzahl_Stellen), WURZEL(Zahl), ZUFALLSZAHL(), ...
oder in der Kategorie Statistik die Funktionen:
ANZAHL(Zellbereich), MAX(Zellbereich), MIN(Zellbereich), MITTELWERT(Zellbereich)
Wir wollen uns anschauen, wie man benutzerdefinierte Funktionen als Makro erstellt.
Deklaration
Bevor man eine Funktion verwenden, sprich: aufrufen kann, muss man sie deklarieren.
Syntax
Function Funktionsname (x1, x2, ...) As Datentyp
Anweisungsblock
Funktionsname = Rückgabewert
End Function
Hinweise:
- Die Deklaration einer Funktion muss immer außerhalb einer Prozedur stehen!
- Variablen, die innerhalb einer Funktion deklariert werden sind nur innerhalb der Funktion gültig (lokale Variablen).
- Der Rückgabewert der Funktion muss am Ende der Deklaration einer Variablen übergeben werden, die genau so heißt wie die Funktion!!!
Dies ist eine Besonderheit in VBA.
Beispiel:
Function monatszins (K, p) As Currency
Dim jahreszins As Currency
jahreszins = K * p / 100
monatszins = jahreszins / 12
End Function
Erklärung:
Die Funktion
monatszins bekommt bei einem Aufruf einen Wert für K und einen Wert für p übergeben.
K und p nennt man
Parameter. Sie müssen in VBA
nicht deklariert werden!!!
Die Funktion berechnet die Zinsen für einen Monat und
gibt diesen Wert der aufrufenden Stelle zurück.
Aufruf
Der Vorteil von benutzerdefinierten Funktionen ist, dass man sie
in Excel wie gewohnt als Funktionen in der Kategorie Benutzerdefiniert und
in Prozeduren
verwenden kann.
Beispiel:
Sub zinsen()
Dim kapital As Currency
Dim zinssatz As Single
kapital = InputBox("Bitte geben Sie das Kapital ein!")
zinssatz = InputBox("Bitte geben Sie den Zinssatz ein!")
MsgBox("Der Monatliche Zins beträgt " & monatszins(kapital, zinssatz))
End Sub
Erklärung:
Nach Eingabe von Kapital und Zinssatz wird ein Meldungsfenster ausgegeben.
Im Meldungsfenster wird die
Funktion monatszins mit den Werten von
kapital und
zinssatz aufgerufen.
Diese oben deklarierte Funktion monatszinssatz gibt dem Meldungsfenster den von der Funktion berechneten Wert zurück, der dann mit dem Text ausgegeben wird.
Rekursive Funktionen
Rein intuitiv programmiert man immer
iterativ. Die Iteration (v. lat.
iterare "wiederholen") ist in der Mathematik eine Methode, sich der Lösung eines Rechenproblems schrittweise, aber zielgerichtet anzunähern. Sie besteht in der
wiederholten Anwendung desselben Rechenverfahrens.
In der Informatik bedeutet Iteration, wenn ein Zugriff
schrittweise, beziehungsweise
wiederholt, auf Datenstrukturen erfolgt, beispielsweise bei einer
FOR-Schleife.
Als Rekursion (lat. recurrere „zurücklaufen“) bezeichnet man die Technik in Mathematik, Logik und Informatik, eine Funktion durch sich selbst zu definieren (rekursive Definition).
Jeder Aufruf der rekursiven Funktion muss sich durch Entfalten der rekursiven Definition in endlich vielen Schritten auflösen lassen. Umgangssprachlich sagt man, sie darf nicht in eine Endlosschleife geraten.
Beispiel:
Die Funktion
sum(n) soll zu jeder Zahl n die
Summe der ersten n natürlichen Zahlen berechnen. Sie ist
iterativ folgendermaßen definiert:
- Um eine gleichwertige rekursive Definition der Summenfunktion zu erhalten, bestimmen wir zunächst den einfachen Fall, den Rekursionsanfang.
Im Beispiel handelt es sich um den Funktionswert für 0.

- Übrig bleibt der schwierige Fall, also hier der Funktionswert für n > 0.
Den schwierigen Fall führen wir auf einen einfacheren Fall zurück, nämlich auf den Fall n - 1.
Dieser einfachere Fall wird unser rekursiver Aufruf. Die entsprechende Vorschrift heißt Rekursionsschritt. Beispielsweise lässt sich die Summe der ersten n Zahlen berechnen, indem man die Summe der ersten n - 1 Zahlen berechnet und dazu die Zahl n addiert:

- Diese beiden Gleichungen lassen sich zu einer rekursiven Definition der Summenfunktion zusammenfassen:

- Die Summe der Zahlen von 0 bis 3 berechnet sich dann wie folgt:

- Die Aufruf-Kette dazu sieht so aus:

Rekursive Funktion:
Function sum(n) As Integer
If n = 0 Then
sum = 0 'Rekursionsanfang
Else
sum = sum(n - 1) + n 'Rekursionsschritt
End If
End Function
Iterative Funktion:
Function sum(n) As Integer
Dim i As Integer
sum = 0
For i = 1 To n
sum = sum + i
Next i
End Function
Rein mathematische Funktion mit Hilfe der
Gaußschen Summenformel:
Function sum(n) As Integer
sum = n * (n + 1) / 2
End Function