Erstellen einer benutzerdefinierten Funktion (UDF) in Excel VBA (Ultimate Guide)

Mit VBA können Sie eine benutzerdefinierte Funktion (auch als benutzerdefinierte Funktion bezeichnet) erstellen, die wie normale Funktionen in den Arbeitsblättern verwendet werden kann.

Diese sind hilfreich, wenn die vorhandenen Excel-Funktionen nicht ausreichen. In solchen Fällen können Sie Ihre eigene benutzerdefinierte benutzerdefinierte Funktion (UDF) erstellen, um Ihren spezifischen Anforderungen gerecht zu werden.

In diesem Tutorial werde ich alles über das Erstellen und Verwenden von benutzerdefinierten Funktionen in VBA behandeln.

Wenn Sie daran interessiert sind, VBA auf einfache Weise zu lernen, besuchen Sie mein Online Excel VBA-Schulung.

Was ist eine Funktionsprozedur in VBA?

Eine Function-Prozedur ist ein VBA-Code, der Berechnungen durchführt und einen Wert (oder ein Array von Werten) zurückgibt.

Mit einer Function-Prozedur können Sie eine Funktion erstellen, die Sie im Arbeitsblatt verwenden können (genau wie jede normale Excel-Funktion wie SUM oder SVERWEIS).

Wenn Sie eine Function-Prozedur mit VBA erstellt haben, können Sie sie auf drei Arten verwenden:

  1. Als Formel im Arbeitsblatt, wo es Argumente als Eingaben annehmen kann und einen Wert oder ein Array von Werten zurückgibt.
  2. Als Teil Ihres VBA-Unterprogrammcodes oder eines anderen Funktionscodes.
  3. Bei bedingter Formatierung.

Obwohl im Arbeitsblatt bereits über 450 integrierte Excel-Funktionen verfügbar sind, benötigen Sie möglicherweise eine benutzerdefinierte Funktion, wenn:

  • Die eingebauten Funktionen können nicht das tun, was Sie tun möchten. In diesem Fall können Sie eine benutzerdefinierte Funktion basierend auf Ihren Anforderungen erstellen.
  • Die eingebauten Funktionen können die Arbeit erledigen, aber die Formel ist lang und kompliziert. In diesem Fall können Sie eine benutzerdefinierte Funktion erstellen, die einfach zu lesen und zu verwenden ist.
Beachten Sie, dass mit VBA erstellte benutzerdefinierte Funktionen erheblich langsamer sein können als die integrierten Funktionen. Daher sind diese am besten für Situationen geeignet, in denen Sie das Ergebnis mit den integrierten Funktionen nicht erzielen können.

Funktion vs. Unterprogramm in VBA

Eine ‚Subroutine‘ ermöglicht Ihnen, einen Codesatz auszuführen, während eine ‚Funktion‘ einen Wert (oder ein Array von Werten) zurückgibt.

Um Ihnen ein Beispiel zu geben, wenn Sie eine Liste von Zahlen (sowohl positive als auch negative) haben und die negativen Zahlen identifizieren möchten, können Sie mit einer Funktion und einem Unterprogramm Folgendes tun.

Ein Unterprogramm kann jede Zelle im Bereich durchlaufen und alle Zellen mit einem negativen Wert hervorheben. In diesem Fall ändert das Unterprogramm die Eigenschaften des Bereichsobjekts (durch Ändern der Farbe der Zellen).

Mit einer benutzerdefinierten Funktion können Sie sie in einer separaten Spalte verwenden und sie kann TRUE zurückgeben, wenn der Wert in einer Zelle negativ ist und FALSE, wenn sie positiv ist. Mit einer Funktion können Sie die Eigenschaften des Objekts nicht ändern. Dies bedeutet, dass Sie die Farbe der Zelle nicht mit einer Funktion selbst ändern können (Sie können dies jedoch mit der bedingten Formatierung mit der benutzerdefinierten Funktion tun).

Wenn Sie mit VBA eine benutzerdefinierte Funktion (UDF) erstellen, können Sie diese Funktion im Arbeitsblatt wie jede andere Funktion verwenden. Ich werde mehr dazu im Abschnitt „Verschiedene Möglichkeiten zur Verwendung einer benutzerdefinierten Funktion in Excel“ behandeln.

Erstellen einer einfachen benutzerdefinierten Funktion in VBA

Lassen Sie mich eine einfache benutzerdefinierte Funktion in VBA erstellen und Ihnen zeigen, wie sie funktioniert.

Der folgende Code erstellt eine Funktion, die die numerischen Teile aus einer alphanumerischen Zeichenfolge extrahiert.

Funktion GetNumeric(CellRef As String) as Long Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If IsNumeric(Mid(CellRef, i, 1)) Then Result = Result & Mid(CellRef, i, 1) Weiter i GetNumeric = Ergebnis-Ende-Funktion

Wenn Sie den obigen Code im Modul haben, können Sie diese Funktion in der Arbeitsmappe verwenden.

Unten ist, wie diese Funktion - GetNumeric - kann in Excel verwendet werden.

Bevor ich Ihnen nun erzähle, wie diese Funktion in VBA erstellt wird und wie sie funktioniert, sollten Sie ein paar Dinge wissen:

  • Wenn Sie eine Funktion in VBA erstellen, steht sie wie jede andere reguläre Funktion in der gesamten Arbeitsmappe zur Verfügung.
  • Wenn Sie den Funktionsnamen gefolgt vom Gleichheitszeichen eingeben, zeigt Excel Ihnen den Namen der Funktion in der Liste der übereinstimmenden Funktionen an. Im obigen Beispiel zeigte mir Excel bei der Eingabe von =Get eine Liste mit meiner benutzerdefinierten Funktion.

Ich glaube, dies ist ein gutes Beispiel, wenn Sie mit VBA eine einfach zu verwendende Funktion in Excel erstellen können. Sie können dasselbe auch mit einer Formel tun (wie in diesem Tutorial gezeigt), aber das wird kompliziert und schwer zu verstehen. Bei dieser UDF müssen Sie nur ein Argument übergeben und Sie erhalten das Ergebnis.

Anatomie einer benutzerdefinierten Funktion in VBA

Im obigen Abschnitt habe ich Ihnen den Code gegeben und Ihnen gezeigt, wie die UDF-Funktion in einem Arbeitsblatt funktioniert.

Lassen Sie uns nun tiefer eintauchen und sehen, wie diese Funktion erstellt wird. Sie müssen den folgenden Code in einem Modul im VB-Editor platzieren. Ich behandle dieses Thema im Abschnitt – „Wo soll der VBA-Code für eine benutzerdefinierte Funktion abgelegt werden?“.

Funktion GetNumeric(CellRef As String) as Long ' Diese Funktion extrahiert den numerischen Teil aus dem String Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If IsNumeric(Mid(CellRef, i, 1)) Then Result = Result & Mid(CellRef, i, 1) Next i GetNumeric = Result End Function

Die erste Zeile des Codes beginnt mit dem Wort - Funktion.

Dieses Wort sagt VBA, dass unser Code eine Funktion (und keine Unterroutine) ist. Dem Wort Function folgt der Name der Funktion - GetNumeric. Dies ist der Name, den wir im Arbeitsblatt verwenden werden, um diese Funktion zu verwenden.

  • Der Name der Funktion darf keine Leerzeichen enthalten. Außerdem können Sie eine Funktion nicht benennen, wenn sie mit dem Namen eines Zellbezugs kollidiert. Beispielsweise können Sie die Funktion ABC123 nicht benennen, da sie sich auch auf eine Zelle im Excel-Arbeitsblatt bezieht.
  • Sie sollten Ihrer Funktion nicht den gleichen Namen wie einer vorhandenen Funktion geben. Wenn Sie dies tun, würde Excel der integrierten Funktion den Vorzug geben.
  • Sie können einen Unterstrich verwenden, wenn Sie Wörter trennen möchten. Get_Numeric ist beispielsweise ein akzeptabler Name.

Dem Funktionsnamen folgen einige Argumente in Klammern. Dies sind die Argumente, die unsere Funktion vom Benutzer benötigen würde. Dies sind genau wie die Argumente, die wir den integrierten Funktionen von Excel bereitstellen müssen. In einer ZÄHLENWENN-Funktion gibt es beispielsweise zwei Argumente (Bereich und Kriterien).

Innerhalb der Klammer müssen Sie die Argumente angeben.

In unserem Beispiel gibt es nur ein Argument - CellRef.

Es empfiehlt sich auch, anzugeben, welche Art von Argument die Funktion erwartet. Da wir in diesem Beispiel die Funktion mit einem Zellbezug füttern, können wir das Argument als Typ „Bereich“ angeben. Wenn Sie keinen Datentyp angeben, würde VBA ihn als Variante betrachten (d. h., Sie können jeden Datentyp verwenden).

Wenn Sie mehrere Argumente haben, können Sie diese in derselben Klammer angeben – getrennt durch ein Komma. Wir werden später in diesem Tutorial sehen, wie Sie mehrere Argumente in einer benutzerdefinierten Funktion verwenden.

Beachten Sie, dass die Funktion als Datentyp „String“ angegeben ist. Dies würde VBA mitteilen, dass das Ergebnis der Formel vom Datentyp String sein würde.

Obwohl ich hier einen numerischen Datentyp verwenden kann (z. B. Long oder Double), würde dies den Zahlenbereich einschränken, der zurückgegeben werden kann. Wenn ich eine 20-stellige lange Zeichenfolge habe, die ich aus der Gesamtzeichenfolge extrahieren muss, würde die Deklaration der Funktion als Long oder Double einen Fehler verursachen (da die Zahl außerhalb ihres Bereichs liegen würde). Daher habe ich den Ausgabedatentyp der Funktion als String beibehalten.

Die zweite Zeile des Codes – die in Grün, die mit einem Apostroph beginnt – ist ein Kommentar. Beim Lesen des Codes ignoriert VBA diese Zeile. Sie können dies verwenden, um eine Beschreibung oder ein Detail zum Code hinzuzufügen.

Die dritte Zeile des Codes deklariert eine Variable ‚StringLength‘ als Integer-Datentyp. Dies ist die Variable, in der wir den Wert der Länge des Strings speichern, der von der Formel analysiert wird.

Die vierte Zeile deklariert die Variable Result als String-Datentyp. Dies ist die Variable, in der wir die Zahlen aus der alphanumerischen Zeichenfolge extrahieren.

Die fünfte Zeile weist der Variablen ‚StringLength‘ die Länge des Strings im Eingabeargument zu. Beachten Sie, dass sich "CellRef" auf das Argument bezieht, das vom Benutzer angegeben wird, während er die Formel im Arbeitsblatt verwendet (oder in VBA - was wir später in diesem Tutorial sehen werden).

Die sechste, siebte und achte Zeile sind der Teil der For Next-Schleife. Die Schleife wird so oft ausgeführt, wie viele Zeichen im Eingabeargument vorhanden sind. Diese Zahl wird von der LEN-Funktion vorgegeben und der Variablen ‚StringLength‘ zugewiesen.

Die Schleife läuft also von „1 bis Stringlength“.

Innerhalb der Schleife analysiert die IF-Anweisung jedes Zeichen der Zeichenfolge und fügt, wenn es numerisch ist, dieses numerische Zeichen der Ergebnisvariablen hinzu. Dazu verwendet es die MID-Funktion in VBA.

Die vorletzte Zeile des Codes weist der Funktion den Wert des Ergebnisses zu. Diese Codezeile stellt sicher, dass die Funktion den Wert "Ergebnis" in die Zelle zurückgibt (von der aus sie aufgerufen wird).

Die letzte Zeile des Codes ist End Function. Dies ist eine obligatorische Codezeile, die VBA mitteilt, dass der Funktionscode hier endet.

Der obige Code erklärt die verschiedenen Teile einer typischen benutzerdefinierten Funktion, die in VBA erstellt wurde. In den folgenden Abschnitten werden wir tief in diese Elemente eintauchen und auch die verschiedenen Möglichkeiten zum Ausführen der VBA-Funktion in Excel sehen.

Argumente in einer benutzerdefinierten Funktion in VBA

In den obigen Beispielen, in denen wir eine benutzerdefinierte Funktion erstellt haben, um den numerischen Teil aus einer alphanumerischen Zeichenfolge (GetNumeric) zu erhalten, wurde die Funktion für ein einzelnes Argument entwickelt.

In diesem Abschnitt werde ich behandeln, wie Sie Funktionen erstellen, die kein Argument annehmen, im Gegensatz zu Funktionen, die mehrere Argumente benötigen (sowohl erforderliche als auch optionale Argumente).

Erstellen einer Funktion in VBA ohne Argumente

Im Excel-Arbeitsblatt haben wir mehrere Funktionen, die keine Argumente akzeptieren (wie RAND, HEUTE, JETZT).

Diese Funktionen sind nicht von Eingabeargumenten abhängig. Beispielsweise würde die Funktion HEUTE das aktuelle Datum und die Funktion RAND eine Zufallszahl zwischen 0 und 1 zurückgeben.

Sie können eine ähnliche Funktion auch in VBA erstellen.

Unten ist der Code, der Ihnen den Namen der Datei gibt. Es braucht keine Argumente, da das Ergebnis, das es zurückgeben muss, von keinem Argument abhängt.

Funktion WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function

Der obige Code gibt das Ergebnis der Funktion als String-Datentyp an (als Ergebnis wollen wir den Dateinamen - der ein String ist).

Diese Funktion weist der Funktion den Wert von ‚ThisWorkbook.Name‘ zu, der zurückgegeben wird, wenn die Funktion im Arbeitsblatt verwendet wird.

Wenn die Datei gespeichert wurde, gibt sie den Namen mit der Dateierweiterung zurück, andernfalls gibt sie nur den Namen an.

Das obige hat jedoch ein Problem.

Wenn sich der Dateiname ändert, wird er nicht automatisch aktualisiert. Normalerweise wird eine Funktion aktualisiert, wenn sich die Eingabeargumente ändern. Da diese Funktion jedoch keine Argumente enthält, wird die Funktion nicht neu berechnet (auch wenn Sie den Namen der Arbeitsmappe ändern, sie schließen und dann erneut öffnen).

Wenn Sie möchten, können Sie eine Neuberechnung erzwingen, indem Sie die Tastenkombination verwenden - Strg + Alt + F9.

Damit die Formel bei jeder Änderung im Arbeitsblatt neu berechnet wird, müssen Sie eine Codezeile eingeben.

Der folgende Code bewirkt, dass die Funktion bei jeder Änderung im Arbeitsblatt neu berechnet wird (genau wie andere ähnliche Arbeitsblattfunktionen wie die Funktion HEUTE oder RAND).

Funktion WorkbookName() As String Application.Volatile True WorkbookName = ThisWorkbook.Name End Function

Wenn Sie nun den Namen der Arbeitsmappe ändern, wird diese Funktion aktualisiert, wenn das Arbeitsblatt geändert wird oder wenn Sie diese Arbeitsmappe erneut öffnen.

Erstellen einer Funktion in VBA mit einem Argument

In einem der obigen Abschnitte haben wir bereits gesehen, wie man eine Funktion erstellt, die nur ein Argument benötigt (die oben beschriebene GetNumeric-Funktion).

Lassen Sie uns eine weitere einfache Funktion erstellen, die nur ein Argument benötigt.

Eine mit dem folgenden Code erstellte Funktion würde den referenzierten Text in Großbuchstaben umwandeln. Jetzt haben wir in Excel bereits eine Funktion dafür, und diese Funktion soll Ihnen nur zeigen, wie es funktioniert. Wenn Sie dies tun müssen, ist es besser, die eingebaute UPPER-Funktion zu verwenden.

Funktion ConvertToUpperCase(CellRef As Range) ConvertToUpperCase = UCase(CellRef) End Function

Diese Funktion verwendet die UCase-Funktion in VBA, um den Wert der CellRef-Variablen zu ändern. Anschließend weist es den Wert der Funktion ConvertToUpperCase zu.

Da diese Funktion ein Argument benötigt, müssen wir den Application.Volatile-Teil hier nicht verwenden. Sobald sich das Argument ändert, wird die Funktion automatisch aktualisiert.

Erstellen einer Funktion in VBA mit mehreren Argumenten

Genau wie Arbeitsblattfunktionen können Sie in VBA Funktionen erstellen, die mehrere Argumente benötigen.

Der folgende Code würde eine Funktion erstellen, die den Text vor dem angegebenen Trennzeichen extrahiert. Es braucht zwei Argumente - den Zellbezug mit der Textzeichenfolge und das Trennzeichen.

Funktion GetDataBeforeDelimiter(CellRef As Range, Delim As String) as String Dim Result As String Dim DelimPosition As Integer DelimPosition = InStr(1, CellRef, Delim, vbBinaryCompare) - 1 Result = Left(CellRef, DelimPosition) GetDataBeforeDelimiter = Result End Function

Wenn Sie mehr als ein Argument in einer benutzerdefinierten Funktion verwenden müssen, können Sie alle Argumente in Klammern setzen, getrennt durch ein Komma.

Beachten Sie, dass Sie für jedes Argument einen Datentyp angeben können. Im obigen Beispiel wurde „CellRef“ als Bereichsdatentyp und „Delim“ als String-Datentyp deklariert. Wenn Sie keinen Datentyp angeben, betrachtet VBA dies als einen abweichenden Datentyp.

Wenn Sie die obige Funktion im Arbeitsblatt verwenden, müssen Sie den Zellbezug mit dem Text als erstes Argument und die Trennzeichen in doppelten Anführungszeichen als zweites Argument angeben.

Anschließend wird die Position des Trennzeichens mithilfe der INSTR-Funktion in VBA überprüft. Diese Position wird dann verwendet, um alle Zeichen vor dem Trennzeichen zu extrahieren (mit der Funktion LINKS).

Schließlich weist es das Ergebnis der Funktion zu.

Diese Formel ist alles andere als perfekt. Wenn Sie beispielsweise ein Trennzeichen eingeben, das nicht im Text enthalten ist, wird ein Fehler ausgegeben. Jetzt können Sie die IFERROR-Funktion im Arbeitsblatt verwenden, um die Fehler zu beseitigen, oder Sie können den folgenden Code verwenden, der den gesamten Text zurückgibt, wenn das Trennzeichen nicht gefunden wird.

Funktion GetDataBeforeDelimiter(CellRef As Range, Delim As String) as String Dim Result As String Dim DelimPosition As Integer DelimPosition = InStr(1, CellRef, Delim, vbBinaryCompare) - 1 Wenn DelimPosition < 0 Then DelimPosition = Len(CellRef) Ergebnis = Left( CellRef, DelimPosition) GetDataBeforeDelimiter = Ergebnis-Ende-Funktion

Wir können diese Funktion weiter optimieren.

Wenn Sie den Text (aus dem Sie den Teil vor dem Trennzeichen extrahieren möchten) direkt in die Funktion eingeben, erhalten Sie einen Fehler. Los geht's… probieren Sie es aus!

Dies geschieht, da wir die „CellRef“ als Bereichsdatentyp angegeben haben.

Oder wenn Sie möchten, dass sich das Trennzeichen in einer Zelle befindet und den Zellbezug verwendet, anstatt ihn in der Formel hart zu codieren, können Sie dies mit dem obigen Code nicht tun. Das liegt daran, dass der Delim als String-Datentyp deklariert wurde.

Wenn die Funktion die Flexibilität haben soll, direkte Texteingaben oder Zellbezüge vom Benutzer zu akzeptieren, müssen Sie die Datentypdeklaration entfernen. Dies würde am Ende dazu führen, dass das Argument zu einem abweichenden Datentyp wird, der jeden Argumenttyp annehmen und verarbeiten kann.

Der folgende Code würde dies tun:

Funktion GetDataBeforeDelimiter(CellRef, Delim) As String Dim Result As String Dim DelimPosition As Integer DelimPosition = InStr(1, CellRef, Delim, vbBinaryCompare) - 1 If DelimPosition < 0 Then DelimPosition = Len(CellRef) Result = Left(CellRef, DelimPosition) GetDataBeforeDelimiter = Ergebnis-Ende-Funktion

Erstellen einer Funktion in VBA mit optionalen Argumenten

Es gibt viele Funktionen in Excel, bei denen einige der Argumente optional sind.

Zum Beispiel hat die legendäre SVERWEIS-Funktion 3 obligatorische Argumente und ein optionales Argument.

Ein optionales Argument ist, wie der Name schon sagt, optional anzugeben. Wenn Sie eines der obligatorischen Argumente nicht angeben, gibt Ihre Funktion einen Fehler aus, aber wenn Sie das optionale Argument nicht angeben, würde Ihre Funktion funktionieren.

Aber optionale Argumente sind nicht nutzlos. Sie ermöglichen es Ihnen, aus einer Reihe von Optionen zu wählen.

Wenn Sie beispielsweise in der SVERWEIS-Funktion das vierte Argument nicht angeben, führt SVERWEIS eine ungefähre Suche durch, und wenn Sie das letzte Argument als FALSE (oder 0) angeben, führt es eine genaue Übereinstimmung durch.

Denken Sie daran, dass die optionalen Argumente immer nach allen erforderlichen Argumenten stehen müssen. Sie können am Anfang keine optionalen Argumente verwenden.

Sehen wir uns nun an, wie Sie eine Funktion in VBA mit optionalen Argumenten erstellen.

Funktion mit nur einem optionalen Argument

Soweit ich weiß, gibt es keine eingebaute Funktion, die nur optionale Argumente akzeptiert (ich kann mich hier irren, aber mir fällt keine solche Funktion ein).

Aber wir können eine mit VBA erstellen.

Unten ist der Code der Funktion, die Ihnen das aktuelle Datum im Format TT-MM-JJJJ anzeigt, wenn Sie kein Argument eingeben (dh leer lassen) und im Format "TT mmmm, JJJJ", wenn Sie etwas eingeben als Argument (dh alles, damit das Argument nicht leer ist).

Funktion CurrDate(Optional fmt als Variante) Dim Result If IsMissing(fmt) Then CurrDate = Format(Date, "dd-mm-yyyy") Else CurrDate = Format(Date, "dd mmmm, yyyy") End If End Function

Beachten Sie, dass die obige Funktion "IsMissing" verwendet, um zu überprüfen, ob das Argument fehlt oder nicht. Um die IsMissing-Funktion zu verwenden, muss Ihr optionales Argument vom Datentyp Variant sein.

Die obige Funktion funktioniert unabhängig davon, was Sie als Argument eingeben. Im Code prüfen wir nur, ob das optionale Argument angegeben wird oder nicht.

Sie können dies robuster machen, indem Sie nur bestimmte Werte als Argumente verwenden und in den übrigen Fällen einen Fehler anzeigen (wie im folgenden Code gezeigt).

Funktion CurrDate(Optional fmt als Variante) Dim Result If IsMissing(fmt) Then CurrDate = Format(Date, "dd-mm-yyyy") ElseIf fmt = 1 Then CurrDate = Format(Date, "dd mmmm, yyyy") Else CurrDate = CVErr(xlErrValue) End If End Function

Der obige Code erstellt eine Funktion, die das Datum im Format „dd-mm-yyyy“ anzeigt, wenn kein Argument angegeben wird, und im Format „dd mmmm,yyyy“, wenn das Argument 1 ist. In allen anderen Fällen gibt sie einen Fehler aus.

Funktion mit erforderlichen sowie optionalen Argumenten

Wir haben bereits einen Code gesehen, der den numerischen Teil aus einem String extrahiert.

Schauen wir uns nun ein ähnliches Beispiel an, das sowohl erforderliche als auch optionale Argumente verwendet.

Der folgende Code erstellt eine Funktion, die den Textteil aus einer Zeichenfolge extrahiert. Wenn das optionale Argument TRUE ist, wird das Ergebnis in Großbuchstaben ausgegeben, und wenn das optionale Argument FALSE ist oder weggelassen wird, wird das Ergebnis unverändert ausgegeben.

Funktion GetText(CellRef As Range, optional TextCase = False) As String Dim StringLength As Integer Dim Result As String StringLength = Len(CellRef) For i = 1 To StringLength If Not (IsNumeric(Mid(CellRef, i, 1))) Then Result = Result & Mid(CellRef, i, 1) Next i Wenn TextCase = True Then Result = UCase(Result) GetText = Result End Function

Beachten Sie, dass wir im obigen Code den Wert von ‚TextCase‘ als False initialisiert haben (sehen Sie in der Klammer in der ersten Zeile nach).

Dadurch haben wir sichergestellt, dass das optionale Argument mit dem Standardwert beginnt, der FALSE ist. Wenn der Benutzer den Wert als TRUE angibt, gibt die Funktion den Text in Großbuchstaben zurück, und wenn der Benutzer das optionale Argument als FALSE angibt oder weglässt, ist der zurückgegebene Text unverändert.

Erstellen einer Funktion in VBA mit einem Array als Argument

Bisher haben wir Beispiele für das Erstellen einer Funktion mit optionalen/erforderlichen Argumenten gesehen – wobei diese Argumente ein einzelner Wert waren.

Sie können auch eine Funktion erstellen, die ein Array als Argument annehmen kann. In Excel-Arbeitsblattfunktionen gibt es viele Funktionen, die Array-Argumente verwenden, wie SUM, SVERWEIS, SUMIF, ZÄHLENWENN usw.

Unten ist der Code, der eine Funktion erstellt, die die Summe aller geraden Zahlen im angegebenen Zellbereich angibt.

Funktion AddEven(CellRef as Range) Dim Cell As Range für jede Zelle in CellRef If IsNumeric(Cell.Value) Then If Cell.Value Mod 2 = 0 Then Result = Result + Cell.Value End If End If Next Cell AddEven = Result End Funktion

Sie können diese Funktion im Arbeitsblatt verwenden und den Zellbereich angeben, der die Zahlen als Argument enthält. Die Funktion würde einen einzelnen Wert zurückgeben - die Summe aller geraden Zahlen (wie unten gezeigt).

In der obigen Funktion haben wir anstelle eines einzelnen Wertes ein Array (A1:A10) bereitgestellt. Damit dies funktioniert, müssen Sie sicherstellen, dass Ihr Datentyp des Arguments ein Array akzeptieren kann.

Im obigen Code habe ich das Argument CellRef als Range angegeben (das ein Array als Eingabe annehmen kann). Sie können hier auch den Datentyp Variante verwenden.

Im Code gibt es eine For Each-Schleife, die jede Zelle durchläuft und überprüft, ob es sich um eine Anzahl von nicht handelt. Ist dies nicht der Fall, passiert nichts und es wird in die nächste Zelle verschoben. Wenn es sich um eine Zahl handelt, prüft es, ob sie gerade ist oder nicht (mit der MOD-Funktion).

Am Ende werden alle geraden Zahlen addiert und die Summe wieder der Funktion zugewiesen.

Erstellen einer Funktion mit einer unbestimmten Anzahl von Argumenten

Beim Erstellen einiger Funktionen in VBA kennen Sie möglicherweise nicht die genaue Anzahl von Argumenten, die ein Benutzer bereitstellen möchte. Die Notwendigkeit besteht also darin, eine Funktion zu erstellen, die so viele Argumente akzeptieren kann, wie bereitgestellt werden, und diese verwenden, um das Ergebnis zurückzugeben.

Ein Beispiel für eine solche Arbeitsblattfunktion ist die SUM-Funktion. Sie können mehrere Argumente angeben (wie dieses):

=SUMME(A1,A2:A4,B1:B20)

Die obige Funktion würde die Werte in all diesen Argumenten hinzufügen. Beachten Sie auch, dass dies eine einzelne Zelle oder ein Array von Zellen sein kann.

Sie können eine solche Funktion in VBA erstellen, indem Sie das letzte Argument (oder es könnte das einzige Argument sein) als optional. Außerdem sollte diesem optionalen Argument das Schlüsselwort „ParamArray“ vorangestellt werden.

„ParamArray“ ist ein Modifikator, mit dem Sie beliebig viele Argumente akzeptieren können. Beachten Sie, dass die Verwendung des Wortes ParamArray vor einem Argument das Argument optional macht. Sie müssen hier jedoch nicht das Wort optional verwenden.

Lassen Sie uns nun eine Funktion erstellen, die eine beliebige Anzahl von Argumenten akzeptieren kann und alle Zahlen in den angegebenen Argumenten addieren würde:

Funktion AddArguments(ParamArray arglist() As Variant) Für jedes Argument in arglist AddArguments = AddArguments + arg Nächstes Argument End Function

Die obige Funktion kann eine beliebige Anzahl von Argumenten annehmen und diese Argumente hinzufügen, um das Ergebnis zu erhalten.

Beachten Sie, dass Sie als Argument nur einen einzelnen Wert, einen Zellbezug, einen booleschen Wert oder einen Ausdruck verwenden können. Sie können kein Array als Argument angeben. Wenn eines Ihrer Argumente beispielsweise D8:D10 lautet, würde diese Formel Ihnen einen Fehler anzeigen.

Wenn Sie beide mehrzelligen Argumente verwenden möchten, müssen Sie den folgenden Code verwenden:

Funktion AddArguments(ParamArray arglist() As Variant) Für jedes Argument in der Argumentliste Für jede Zelle in der Argumentliste AddArguments = AddArguments + Zelle Nächste Zelle Nächstes Argument End Function

Beachten Sie, dass diese Formel mit mehreren Zellen und Arrayreferenzen funktioniert, jedoch keine hartcodierten Werte oder Ausdrücke verarbeiten kann. Sie können eine robustere Funktion erstellen, indem Sie diese Bedingungen überprüfen und behandeln, aber das ist hier nicht die Absicht.

Die Absicht hier ist, Ihnen zu zeigen, wie ParamArray funktioniert, damit Sie eine unbegrenzte Anzahl von Argumenten in der Funktion zulassen können. Falls Sie eine bessere Funktion als die durch den obigen Code erstellte wünschen, verwenden Sie die SUM-Funktion im Arbeitsblatt.

Erstellen einer Funktion, die ein Array zurückgibt

Bisher haben wir Funktionen gesehen, die einen einzelnen Wert zurückgeben.

Mit VBA können Sie eine Funktion erstellen, die eine Variante zurückgibt, die ein ganzes Array von Werten enthalten kann.

Array-Formeln sind auch als integrierte Funktionen in Excel-Arbeitsblättern verfügbar. Wenn Sie mit Matrixformeln in Excel vertraut sind, wissen Sie, dass diese mit Strg + Umschalt + Eingabetaste (statt nur Eingabe) eingegeben werden. Weitere Informationen zu Arrayformeln finden Sie hier. Wenn Sie sich mit Array-Formeln nicht auskennen, machen Sie sich keine Sorgen, lesen Sie weiter.

Erstellen wir eine Formel, die ein Array aus drei Zahlen (1,2,3) zurückgibt.

Der folgende Code würde dies tun.

Funktion ThreeNumbers() Als Variante Dim NumberValue(1 To 3) NumberValue(1) = 1 NumberValue(2) = 2 NumberValue(3) = 3 ThreeNumbers = NumberValue End Function

Im obigen Code haben wir als Variante die Funktion ‚ThreeNumbers‘ angegeben. Dies ermöglicht es, ein Array von Werten zu speichern.

Die Variable ‚NumberValue‘ ist als Array mit 3 Elementen deklariert. Es enthält die drei Werte und weist sie der Funktion „ThreeNumbers“ zu.

Sie können diese Funktion im Arbeitsblatt verwenden, indem Sie die Funktion eingeben und die Strg + Umschalt + Eingabetaste drücken (halten Sie die Strg- und die Umschalttaste gedrückt und drücken Sie dann die Eingabetaste).

Wenn Sie dies tun, wird 1 in der Zelle zurückgegeben, aber in Wirklichkeit enthält es alle drei Werte. Um dies zu überprüfen, verwenden Sie die folgende Formel:

=MAX(DreiZahlen())

Verwenden Sie die obige Funktion mit Strg + Umschalt + Eingabetaste. Sie werden feststellen, dass das Ergebnis jetzt 3 ist, da dies die größten Werte im Array sind, die von der Max-Funktion zurückgegeben werden, die die drei Zahlen als Ergebnis unserer benutzerdefinierten Funktion ThreeNumbers erhält.

Sie können dieselbe Technik verwenden, um eine Funktion zu erstellen, die ein Array von Monatsnamen zurückgibt, wie im folgenden Code gezeigt:

Funktion Months() als Variante Dim MonthName(1 bis 12) MonthName(1) = "Januar" MonthName(2) = "Februar" MonthName(3) = "März" MonthName(4) = "April" MonthName(5) = "Mai" MonthName(6) = "June" MonthName(7) = "Juli" MonthName(8) = "August" MonthName(9) = "September" MonthName(10) = "Oktober" MonthName(11) = "November " MonthName(12) = "Dezember" Months = MonthName Endfunktion

Wenn Sie nun die Funktion =Months() im Excel-Arbeitsblatt eingeben und Strg + Umschalt + Eingabe verwenden, wird das gesamte Array der Monatsnamen zurückgegeben. Beachten Sie, dass in der Zelle nur Januar angezeigt wird, da dies der erste Wert im Array ist. Dies bedeutet nicht, dass das Array nur einen Wert zurückgibt.

Um Ihnen zu zeigen, dass alle Werte zurückgegeben werden, tun Sie dies - wählen Sie die Zelle mit der Formel aus, gehen Sie zur Bearbeitungsleiste, wählen Sie die gesamte Formel aus und drücken Sie F9. Dies zeigt Ihnen alle Werte, die die Funktion zurückgibt.

Sie können dies verwenden, indem Sie die folgende INDEX-Formel verwenden, um eine Liste aller Monatsnamen auf einmal zu erhalten.

=INDEX(Monate(),ZEILE())

Wenn Sie nun viele Werte haben, ist es keine gute Praxis, diese Werte einzeln zuzuweisen (wie oben beschrieben). Stattdessen können Sie die Array-Funktion in VBA verwenden.

Derselbe Code, in dem wir die Funktion "Monate" erstellen, würde also wie unten gezeigt kürzer:

Funktion Months() As Variant Months = Array("Januar", "Februar", "März", "April", "Mai", "Juni", _ "Juli", "August", "September", "Oktober" , "November", "Dezember") End Function

Die obige Funktion verwendet die Array-Funktion, um die Werte direkt der Funktion zuzuweisen.

Beachten Sie, dass alle oben erstellten Funktionen ein horizontales Array von Werten zurückgeben. Das bedeutet, dass Sie alle Monatsnamen erhalten, wenn Sie 12 horizontale Zellen auswählen (sagen wir A1: L1) und die Formel = Monate () in Zelle A1 eingeben.

Aber was ist, wenn Sie diese Werte in einem vertikalen Zellbereich haben möchten.

Sie können dies tun, indem Sie die TRANSPOSE-Formel im Arbeitsblatt verwenden.

Wählen Sie einfach 12 vertikale Zellen (aneinandergrenzend) aus und geben Sie die folgende Formel ein.

Den Umfang einer benutzerdefinierten Funktion in Excel verstehen

Eine Funktion kann zwei Bereiche haben - Öffentlich oder Privat.

  • EIN Öffentlicher Geltungsbereich bedeutet, dass die Funktion für alle Blätter der Arbeitsmappe sowie alle Prozeduren (Sub und Function) über alle Module der Arbeitsmappe hinweg verfügbar ist. Dies ist nützlich, wenn Sie eine Funktion aus einer Unterroutine aufrufen möchten (wir werden sehen, wie dies im nächsten Abschnitt geschieht).
  • EIN Privater Geltungsbereich bedeutet, dass die Funktion nur in dem Modul verfügbar ist, in dem sie vorhanden ist. Sie können es nicht in anderen Modulen verwenden. Sie werden es auch nicht in der Liste der Funktionen im Arbeitsblatt sehen. Wenn Ihr Funktionsname beispielsweise „Monate()“ lautet und Sie in Excel eine Funktion eingeben (nach dem =-Zeichen), wird Ihnen der Funktionsname nicht angezeigt. Sie können es jedoch weiterhin verwenden, wenn Sie den Formelnamen eingeben.

Wenn Sie nichts angeben, ist die Funktion standardmäßig eine öffentliche Funktion.

Unten ist eine Funktion, die eine private Funktion ist:

Private Funktion WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function

Sie können diese Funktion in den Unterprogrammen und Prozeduren in denselben Modulen verwenden, jedoch nicht in anderen Modulen. Diese Funktion würde auch nicht im Arbeitsblatt angezeigt.

Der folgende Code würde diese Funktion öffentlich machen. Es wird auch im Arbeitsblatt angezeigt.

Funktion WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function

Verschiedene Möglichkeiten zur Verwendung einer benutzerdefinierten Funktion in Excel

Nachdem Sie eine benutzerdefinierte Funktion in VBA erstellt haben, können Sie diese auf viele verschiedene Arten verwenden.

Lassen Sie uns zunächst die Verwendung der Funktionen im Arbeitsblatt behandeln.

Verwenden von UDFs in Arbeitsblättern

Wir haben bereits Beispiele für die Verwendung einer in VBA erstellten Funktion im Arbeitsblatt gesehen.

Alles, was Sie tun müssen, ist den Funktionsnamen einzugeben, und er wird im Intellisense angezeigt.

Beachten Sie, dass es sich um eine öffentliche Funktion handeln muss, damit die Funktion im Arbeitsblatt angezeigt wird (wie im obigen Abschnitt erläutert).

Sie können auch das Dialogfeld Funktion einfügen verwenden, um die benutzerdefinierte Funktion einzufügen (mit den folgenden Schritten). Dies würde nur für Funktionen funktionieren, die öffentlich sind.

  • Wechseln Sie zur Registerkarte Daten.
  • Klicken Sie auf die Option „Funktion einfügen“.
  • Wählen Sie im Dialogfeld Funktion einfügen die Kategorie Benutzerdefiniert aus. Diese Option wird nur angezeigt, wenn Sie eine Funktion im VB-Editor haben (und die Funktion Öffentlich ist).
  • Wählen Sie die Funktion aus der Liste aller öffentlichen benutzerdefinierten Funktionen aus.
  • Klicken Sie auf die Schaltfläche Ok.

Die obigen Schritte würden die Funktion in das Arbeitsblatt einfügen. Außerdem wird ein Dialogfeld "Funktionsargumente" angezeigt, das Ihnen Details zu den Argumenten und dem Ergebnis enthält.

Sie können eine benutzerdefinierte Funktion wie jede andere Funktion in Excel verwenden. Dies bedeutet auch, dass Sie es mit anderen integrierten Excel-Funktionen verwenden können. Beispielsweise. Die folgende Formel würde den Namen der Arbeitsmappe in Großbuchstaben angeben:

=UPPER(Arbeitsmappenname())

Verwenden von benutzerdefinierten Funktionen in VBA-Prozeduren und -Funktionen

Wenn Sie eine Funktion erstellt haben, können Sie sie auch in anderen Unterprozeduren verwenden.

Wenn die Funktion Public ist, kann sie in jeder Prozedur im gleichen oder einem anderen Modul verwendet werden. Wenn es privat ist, kann es nur im selben Modul verwendet werden.

Unten ist eine Funktion, die den Namen der Arbeitsmappe zurückgibt.

Funktion WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function

Die folgende Prozedur ruft die Funktion auf und zeigt dann den Namen in einem Meldungsfeld an.

Sub ShowWorkbookName() MsgBox WorkbookName End Sub

Sie können eine Funktion auch von einer anderen Funktion aus aufrufen.

In den folgenden Codes gibt der erste Code den Namen der Arbeitsmappe zurück, und der zweite Code gibt den Namen in Großbuchstaben zurück, indem er die erste Funktion aufruft.

Funktion WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function
Funktion WorkbookNameinUpper() WorkbookNameinUpper = UCase(WorkbookName) End Function

Aufrufen einer benutzerdefinierten Funktion aus anderen Arbeitsmappen

Wenn Sie eine Funktion in einer Arbeitsmappe haben, können Sie diese Funktion auch in anderen Arbeitsmappen aufrufen.

Dazu gibt es mehrere Möglichkeiten:

  1. Erstellen eines Add-Ins
  2. Speicherfunktion in der Personal Macro Workbook
  3. Verweisen auf die Funktion aus einer anderen Arbeitsmappe.

Erstellen eines Add-Ins

Wenn Sie ein Add-In erstellen und installieren, steht Ihnen die benutzerdefinierte Funktion in allen Arbeitsmappen zur Verfügung.

Angenommen, Sie haben eine benutzerdefinierte Funktion erstellt - "GetNumeric" und möchten sie in allen Arbeitsmappen haben. Erstellen Sie dazu eine neue Arbeitsmappe und haben Sie den Funktionscode in einem Modul in dieser neuen Arbeitsmappe.

Führen Sie nun die folgenden Schritte aus, um es als Add-In zu speichern und dann in Excel zu installieren.

  • Gehen Sie zur Registerkarte Datei und klicken Sie auf Speichern unter.
  • Ändern Sie im Dialogfeld "Speichern unter" den Typ "Speichern unter" in .xlam. Der Name, den Sie der Datei zuweisen, wäre der Name Ihres Add-Ins. In diesem Beispiel wird die Datei unter dem Namen GetNumeric gespeichert.
    • Sie werden feststellen, dass sich der Pfad der Datei, in der sie gespeichert wird, automatisch ändert. Sie können die Standardeinstellung verwenden oder bei Bedarf ändern.
  • Öffnen Sie eine neue Excel-Arbeitsmappe und wechseln Sie zur Registerkarte Entwickler.
  • Klicken Sie auf die Option Excel-Add-Ins.
  • Suchen Sie im Dialogfeld Add-Ins die gespeicherte Datei, und klicken Sie auf OK.

Jetzt ist das Add-In aktiviert.

Jetzt können Sie die benutzerdefinierte Funktion in allen Arbeitsmappen verwenden.

Speichern der Funktion in der persönlichen Makro-Arbeitsmappe

Eine persönliche Makroarbeitsmappe ist eine versteckte Arbeitsmappe in Ihrem System, die jedes Mal geöffnet wird, wenn Sie die Excel-Anwendung öffnen.

Es ist ein Ort, an dem Sie Makrocodes speichern und dann von jeder Arbeitsmappe aus auf diese Makros zugreifen können. Es ist ein großartiger Ort, um die Makros zu speichern, die Sie häufig verwenden möchten.

Standardmäßig gibt es in Excel keine persönliche Makroarbeitsmappe. Sie müssen es erstellen, indem Sie ein Makro aufzeichnen und in der persönlichen Makro-Arbeitsmappe speichern.

Die detaillierten Schritte zum Erstellen und Speichern von Makros in der persönlichen Makro-Arbeitsmappe finden Sie hier.

Verweisen auf die Funktion aus einer anderen Arbeitsmappe

Während die ersten beiden Methoden (Erstellen eines Add-Ins und Verwenden einer persönlichen Makroarbeitsmappe) in allen Situationen funktionieren würden, muss diese Arbeitsmappe geöffnet sein, wenn Sie auf die Funktion aus einer anderen Arbeitsmappe verweisen möchten.

Angenommen, Sie haben eine Arbeitsmappe mit dem Namen ‘Arbeitsbuch mit Formel’, und es hat die Funktion mit dem Namen ‘GetNumeric’.

Um diese Funktion in einer anderen Arbeitsmappe zu verwenden (während der Arbeitsbuch mit Formel geöffnet ist), können Sie die folgende Formel verwenden:

=’Arbeitsmappe mit Formel’!GetNumeric(A1)

Die obige Formel verwendet die benutzerdefinierte Funktion im Arbeitsbuch mit Formel Datei und geben Sie das Ergebnis.

Beachten Sie, dass der Arbeitsmappenname Leerzeichen enthält und Sie ihn in einfache Anführungszeichen setzen müssen.

Verwenden der Exit-Funktionsanweisung VBA

Wenn Sie eine Funktion verlassen möchten, während der Code ausgeführt wird, können Sie dies mit der Anweisung „Exit Function“ tun.

Der folgende Code würde die ersten drei numerischen Zeichen aus einer alphanumerischen Textzeichenfolge extrahieren. Sobald sie die drei Zeichen bekommt, endet die Funktion und gibt das Ergebnis zurück.

Funktion GetNumericFirstThree(CellRef As Range) As Long Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If J = 3 Then Exit Function If IsNumeric(Mid(CellRef, i, 1)) Then J = J + 1 Ergebnis = Ergebnis & Mid(CellRef, i, 1) GetNumericFirstThree = Ergebnis Ende, wenn Nächstes i End Function

Die obige Funktion prüft die Anzahl der numerischen Zeichen und wenn sie 3 numerische Zeichen erhält, beendet sie die Funktion in der nächsten Schleife.

Debuggen einer benutzerdefinierten Funktion

Es gibt einige Techniken, die Sie beim Debuggen einer benutzerdefinierten Funktion in VBA verwenden können:

Debuggen einer benutzerdefinierten Funktion mithilfe des Meldungsfelds

Verwenden Sie die MsgBox-Funktion, um ein Meldungsfeld mit einem bestimmten Wert anzuzeigen.

Der angezeigte Wert kann auf dem basieren, was Sie testen möchten. Wenn Sie beispielsweise überprüfen möchten, ob der Code ausgeführt wird oder nicht, würde jede Meldung funktionieren, und wenn Sie überprüfen möchten, ob die Schleifen funktionieren oder nicht, können Sie einen bestimmten Wert oder den Schleifenzähler anzeigen.

Debuggen einer benutzerdefinierten Funktion durch Setzen des Breakpoints

Setzen Sie einen Breakpoint, um jede Zeile einzeln durchlaufen zu können. Um einen Breakpoint zu setzen, wählen Sie die gewünschte Zeile aus und drücken Sie F9 oder klicken Sie auf den grauen vertikalen Bereich links neben den Codezeilen. Jede dieser Methoden würde einen Breakpoint einfügen (Sie sehen einen roten Punkt im grauen Bereich).

Nachdem Sie den Breakpoint gesetzt und die Funktion ausgeführt haben, geht sie bis zur Breakpoint-Zeile und stoppt dann. Jetzt können Sie den Code mit der Taste F8 durchgehen. Einmaliges Drücken von F8 wechselt zur nächsten Zeile im Code.

Debuggen einer benutzerdefinierten Funktion mithilfe von Debug.Print im Code

Sie können die Debug.Print-Anweisung in Ihrem Code verwenden, um die Werte der angegebenen Variablen/Argumente im unmittelbaren Fenster abzurufen.

Im folgenden Code habe ich beispielsweise Debug.Print verwendet, um den Wert von zwei Variablen zu erhalten - "j" und "Ergebnis".

Funktion GetNumericFirstThree(CellRef As Range) As Long Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If J = 3 Then Exit Function If IsNumeric(Mid(CellRef, i, 1)) Then J = J + 1 Ergebnis = Ergebnis & Mitte(CellRef, i, 1) Debug.Print J, Ergebnis GetNumericFirstThree = Ergebnis End If Next i End Function

Wenn dieser Code ausgeführt wird, zeigt er im unmittelbaren Fenster Folgendes an.

Integrierte Excel-Funktionen vs. Benutzerdefinierte VBA-Funktion

Die Verwendung von in Excel integrierten Funktionen gegenüber benutzerdefinierten Funktionen, die in VBA erstellt wurden, bietet nur wenige starke Vorteile.

  • Eingebaute Funktionen sind viel schneller als die VBA-Funktionen.
  • Wenn Sie einen Bericht/ein Dashboard mit VBA-Funktionen erstellen und es an einen Kunden/Kollegen senden, müssen sie sich keine Gedanken darüber machen, ob die Makros aktiviert sind oder nicht. In einigen Fällen bekommen Kunden/Kunden Angst, wenn sie eine Warnung in der gelben Leiste sehen (die sie einfach auffordert, Makros zu aktivieren).
  • Mit integrierten Excel-Funktionen müssen Sie sich keine Gedanken über Dateierweiterungen machen. Wenn die Arbeitsmappe Makros oder benutzerdefinierte Funktionen enthält, müssen Sie sie im XLSM-Format speichern.

Obwohl es viele gute Gründe gibt, die integrierten Excel-Funktionen zu verwenden, ist es in einigen Fällen besser, eine benutzerdefinierte Funktion zu verwenden.

  • Es ist besser, eine benutzerdefinierte Funktion zu verwenden, wenn Ihre integrierte Formel riesig und kompliziert ist. Dies wird noch relevanter, wenn Sie eine andere Person benötigen, um die Formeln zu aktualisieren. Wenn Sie beispielsweise eine riesige Formel mit vielen verschiedenen Funktionen haben, kann selbst das Ändern eines Verweises auf eine Zelle mühsam und fehleranfällig sein. Stattdessen können Sie eine benutzerdefinierte Funktion erstellen, die nur ein oder zwei Argumente akzeptiert und die ganze Arbeit im Backend erledigt.
  • Wenn Sie etwas erledigen müssen, das mit den in Excel integrierten Funktionen nicht erledigt werden kann. Ein Beispiel hierfür kann sein, wenn Sie alle numerischen Zeichen aus einer Zeichenfolge extrahieren möchten. In solchen Fällen überwiegt der Nutzen einer benutzerdefinierten Funktion gar die Nachteile.

Wo soll der VBA-Code für eine benutzerdefinierte Funktion abgelegt werden?

Beim Erstellen einer benutzerdefinierten Funktion müssen Sie den Code in das Codefenster für die Arbeitsmappe einfügen, in der Sie die Funktion verwenden möchten.

Nachfolgend finden Sie die Schritte zum Einfügen des Codes für die Funktion „GetNumeric“ in die Arbeitsmappe.

  1. Wechseln Sie zur Registerkarte Entwickler.
  2. Klicken Sie auf die Visual Basic-Option. Dies öffnet den VB-Editor im Backend.
  3. Klicken Sie im Bereich Projekt-Explorer im VB-Editor mit der rechten Maustaste auf ein beliebiges Objekt für die Arbeitsmappe, in die Sie den Code einfügen möchten. Wenn Sie den Projekt-Explorer nicht sehen, gehen Sie zur Registerkarte Ansicht und klicken Sie auf Projekt-Explorer.
  4. Gehen Sie zu Einfügen und klicken Sie auf Modul. Dadurch wird ein Modulobjekt für Ihre Arbeitsmappe eingefügt.
  5. Kopieren Sie den Code und fügen Sie ihn in das Modulfenster ein.

Möglicherweise gefallen Ihnen auch die folgenden Excel VBA-Tutorials:

  • Arbeiten mit Zellen und Bereichen in Excel VBA.
  • Arbeiten mit Arbeitsblättern in Excel VBA.
  • Arbeiten mit Arbeitsmappen mit VBA.
  • So verwenden Sie Schleifen in Excel VBA.
  • Excel VBA-Ereignisse - Eine einfache (und vollständige) Anleitung
  • Verwenden von IF Then Else-Anweisungen in VBA.
  • So zeichnen Sie ein Makro in Excel auf.
  • So führen Sie ein Makro in Excel aus.
  • So sortieren Sie Daten in Excel mit VBA (eine Schritt-für-Schritt-Anleitung).
  • Excel VBA InStr-Funktion – mit Beispielen erklärt.

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave