Rückkehr in VBA-Code-Beispiele

VBA-Funktion – Aufrufen, Rückgabewert und Parameter

In diesem Tutorial lernen Sie, wie Sie Funktionen mit und ohne Parameter in VBA erstellen und verwenden können.

VBA enthält eine große Anzahl von eingebauten Funktionen, die Sie verwenden können, aber Sie können auch Ihre eigenen schreiben. Wenn Sie den Code in VBA schreiben, können Sie ihn in einer Sub- oder einer Funktionsprozedur schreiben. Eine Funktionsprozedur ist in der Lage, einen Wert an Ihren Code zurückzugeben. Dies ist äußerst nützlich, wenn Sie möchten, dass VBA eine Aufgabe ausführt und ein Ergebnis zurückgibt. VBA-Funktionen können auch innerhalb von Excel aufgerufen werden, genau wie die in Excel integrierten Funktionen.

Erstellen einer Funktion ohne Übergabeparameter

Um eine Funktion zu erstellen, müssen Sie die Funktion definieren, indem Sie der Funktion einen Namen geben. Die Funktion kann dann als Datentyp definiert werden, der die Art der Daten angibt, die die Funktion zurückgeben soll.

Vielleicht möchten Sie eine Funktion erstellen, die bei jedem Aufruf, ähnlich wie eine Konstante, einen statischen Wert zurückgibt.

Function WertRueckgabe() As Integer
   WertRueckgabe = 50
End Function

Wenn Sie die Funktion ausführen, würde sie immer den Wert 50 zurückgeben.

vba funktion ohne parameter

Sie können auch Funktionen erstellen, die auf Objekte in VBA verweisen, aber Sie müssen das Schlüsselwort Set verwenden, um den Wert aus der Funktion zurückgeben zu können.

Function BereichZurueckgeben() As Range
  Set BereichZurueckgeben = Range("A1:G4")
End Function

Wenn Sie die obige Funktion in Ihrem VBA-Code verwenden, würde die Funktion immer den Bereich der Zellen A1 bis G4 in dem Blatt zurückgeben, in dem Sie gerade arbeiten.

Aufrufen einer Funktion aus einer Unterprozedur

Sobald Sie eine Funktion erstellt haben, können Sie sie von jeder anderen Stelle in Ihrem Code aus aufrufen, indem Sie eine Unterprozedur verwenden, um die Funktion aufzurufen.

Funktion ohne parameter testen

Es würde immer der Wert 50 zurückgegeben werden. Sie können die Funktion GetRange auch über eine Sub aufrufen.

bereich funktion ohne parameter

Im obigen Beispiel wird die Funktion GetRange von der Sub aufgerufen, um die Zellen im Bereichsobjekt fett darzustellen.

Funktionen erstellen

Einzelnes Argument

Sie können Ihrer Funktion auch einen oder mehrere Parameter zuweisen. Diese Parameter können als Argumente bezeichnet werden.

Function KiloInPfundUmrechnen (dblKilo As Double) As Double
   KiloInPfundUmrechnen = dblKilo*2.2
End Function

Die obige Funktion kann dann von einer Sub aus aufgerufen werden, um zu ermitteln, wie viele Pfund eine bestimmte Anzahl von Kilos entsprechen.

vba funktion rueckgabewert

Eine Funktion kann bei Bedarf von mehreren Prozeduren innerhalb Ihres VBA-Codes aufgerufen werden. Dies ist sehr nützlich, da Sie so nicht immer wieder den gleichen Code schreiben müssen. Außerdem können Sie so lange Prozeduren in kleine, überschaubare Funktionen unterteilen.

funktion rueckgabewert mehrfache verwendung

Im obigen Beispiel haben wir 2 Prozeduren. Jede von ihnen verwendet die Funktion, um den Pfundwert der Kilos zu berechnen, die ihnen im  Funktionsargument dblKilo übergeben werden.

Mehrere Argumente

Sie können eine Funktion mit mehreren Argumenten erstellen und die Werte mit Hilfe einer Sub an die Funktion übergeben.

Function TagesDifferenzBerechnen(Datum1 As Date, Datum2 As Date) As Double
   TagesDifferenzBerechnen = Datum2 - Datum1
End Function

Wir können dann die Funktion aufrufen, um die Anzahl der Tage zwischen 2 Daten zu berechnen.

vba zwei parameter funktion

Optionale Argumente

Sie können auch optionale Argumente an eine Funktion übergeben. Mit anderen Worten, manchmal benötigen Sie das Argument und manchmal nicht. Je nachdem, mit welchem Code Sie die Funktion verwenden.

Function TagesDifferenzBerechnen(Datum1 As Date, Optional Datum2 As Date) As Double
'prüft, ob das zweite Datum vorhanden ist, und wenn nicht, setzt es Datum2 mit dem heutigen Datum gleich.
    If Datum2 = 0 Then Datum2 = Date
'Differenz berechnen
   TagesDifferenzBerechnen = Datum2 - Datum1 
End Function

vba funktion optionale parameter

Standardwert der Argumente

Sie können auch den Standardwert der optionalen Argumente festlegen, wenn Sie die Funktion erstellen, so dass, der Wert stattdessen verwendet wird, den Sie als Standard festgelegt haben, wenn der Benutzer das Argument auslässt.

Function TagesDifferenzBerechnen(Datum1 As Date, Optional Datum2 As Date="06.02.2020") As Double 
'Differenz berechnen 
   TagesDifferenzBerechnen = Datum2 - Datum1 
End Function

vba funktion optionale standardwerte

ByVal und ByRef

Wenn Sie Werte an eine Funktion übergeben, können Sie die Schlüsselwörter ByVal oder ByRef verwenden. Wenn Sie eines der beiden auslassen, wird standardmäßig ByRef verwendet. ByVal bedeutet, dass Sie eine Kopie der Variablen an die Funktion übergeben, während ByRef bedeutet, dass Sie auf den ursprünglichen Wert der Variablen verweisen. Wenn Sie eine Kopie der Variablen (ByVal) übergeben, wird der ursprüngliche Wert der Variablen NICHT geändert, aber wenn Sie auf die Variable verweisen, wird der ursprüngliche Wert der Variablen von der Funktion geändert.

Function WertRueckgabe(ByRef intA As Integer) As Integer
   intA = intA * 4
   WertRueckgabe = intA
End Function

In der obigen Funktion könnte die ByRef weggelassen werden, und die Funktion würde auf die gleiche Weise funktionieren.

Function WertRueckgabe(intA As Integer) As Integer
   intA = intA * 4
   WertRueckgabe = intA
End Function

Um diese Funktion aufzurufen, können wir eine Unterprozedur ausführen.

Sub WerteZurueckgeben()
   Dim intVal As Integer
'Die Variable mit dem Wert 10 belegen
   intVal = 10
'Die Funktion WertRueckgabe ausführen und den Wert im Direktfenster anzeigen
   Debug.Print WertRueckgabe(intVal)
'Den Wert der Variablen intVal im Direktfenster anzeigen 
   Debug.Print intVal
End Sub

vba funktion byref

Beachten Sie, dass in den Debugger-Fenstern beide Male der Wert 40 angezeigt wird. Wenn Sie die Variable IntVal an die Funktion übergeben, wird der Wert 10 an die Funktion übergeben und mit 4 multipliziert. Wenn Sie das Schlüsselwort ByRef verwenden (oder es ganz weglassen), wird der Wert der Variablen IntVal geändert. Dies zeigt sich, wenn Sie zuerst das Ergebnis der Funktion im Direktenster (40) und dann den Wert der IntVal-Variablen im Debugger-Fenster (ebenfalls 40) anzeigen. Wenn wir den Wert der ursprünglichen Variablen NICHT ändern wollen, müssen wir ByVal in der Funktion verwenden.

Function WertRueckgabe(ByVal intA As Integer) As Integer
   intA = intA * 4
   WertRueckgabe = intA
End Function

Wenn wir nun die Funktion von einer Sub aus aufrufen, bleibt der Wert der Variablen IntVal bei 10.

vba funktion byval

Funktion beenden

Wenn Sie eine Funktion erstellen, die eine bestimmte Bedingung prüft, und wenn diese erfüllt ist, möchten Sie den Wert aus der Funktion zurückgeben, müssen Sie möglicherweise eine Exit-Function-Anweisung in Ihre Funktion einfügen, um die Funktion zu beenden, bevor Sie den gesamten Code durchlaufen haben.

Function ZahlFinden(strSuchtext As String) As Integer
   Dim i As Integer
'Alle Buchstaben in der Zeichenkette durchlaufen
   For i = 1 To Len(strSuchtext)
   'Wenn der Buchstabe numerisch ist, den Wert an die Funktion zurückgeben
      If IsNumeric(Mid(strSuchtext, i, 1)) Then
         Zahlfinden= Mid(strSuchtext, i, 1)
   'Dann die Funktion verlassen
         Exit Function
      End If
   Next
   ZahlFinden= 0
End Function

Die obige Funktion durchläuft die angegebene Zeichenkette in einer Schleife, bis sie eine Zahl findet, und gibt dann diese Zahl aus der Zeichenkette zurück. Es wird nur die erste Zahl in der Zeichenkette gefunden, da die Funktion dann beendet wird. Die obige Funktion kann von einer Sub-Routine wie der folgenden aufgerufen werden:

Sub AufZahlPruefen()
   Dim IstZahl As Integer
'Einen Textstring an die Funktion "ZahlFinden" übergeben
   IstZahl = ZahlFinden("Upper Floor, 8 Oak Lane, Texas")
'Das Ergebnis im Direktfenster anzeigen
   Debug.Print IstZahl
End Sub

vba funktion beenden

Verwenden einer Funktion aus einem Excel-Blatt heraus

Sie können eine Funktion nicht nur von Ihrem VBA-Code aus über eine Sub aufrufen, sondern auch von Ihrem Excel-Blatt aus. Die Funktionen, die Sie erstellt haben, sollten standardmäßig in Ihrer Funktionsliste im Abschnitt „Benutzerdefiniert“ in der Funktionsliste erscheinen. Klicken Sie auf das Symbol fx um das Dialogfenster „Funktion einfügen“ anzuzeigen.

vba funktion einfuegen

Wählen Sie Benutzerdefiniert aus der Kategorieliste

vba benutzerdefinierte funktion

Wählen Sie die gewünschte Funktion aus den verfügbaren benutzerdefinierten Funktionen (BDF) aus.

vba benutzerdefinierte funktion auswaehlen

Wenn Sie Ihre Funktion in Excel schreiben, sollte sie auch in der Dropdown-Liste der Funktionen erscheinen.

vba funktionen dropdown

Wenn Sie nicht möchten, dass die Funktion innerhalb eines Excel-Blatts verfügbar ist, müssen Sie das Wort Private vor das Wort Function setzen, wenn Sie die Funktion in Ihrem VBA-Code erstellen.

Private Function TagesDifferenzBerechnen(Datum1 As Date, Datum2 As Date) As Double 
   TagesDifferenzBerechnen = Datum2 - Datum1 
End Function

Die Funktion wird nun nicht mehr in der Dropdown-Liste mit den verfügbaren Excel-Funktionen angezeigt.

vba funktionen auswahl

Interessanterweise können Sie die Funktion aber immer noch verwenden. Sie erscheint nur nicht mehr in der Liste, wenn Sie nach ihr suchen!

vba funktion excel verwendung

Wenn Sie das zweite Argument als Optional deklariert haben, können Sie es sowohl in der Excel-Tabelle als auch im VBA-Code weglassen.

funktion optional parameter verwendung

Sie können die Funktion, die Sie erstellt haben, auch ohne Argumente in Ihrem Excel-Blatt verwenden.

funktion ohne uebergabeparameter excel verwendung