Excel: Eigene Funktionen mit VBA erstellen

Von der Prozedur zur Funktion

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Bevor Sie in Excel eine VBA-Funktion erstellen, sollten Sie diese zunächst als Prozedur definieren und testen. Erst wenn die Prozedur korrekt funktioniert, können Sie diese in eine Funktion umwandeln. Das Vorgehen dazu erläutert Ihnen dieser Film.
09:23

Transkript

Das Videotraining heißt: Erstellen von eigenen Funktionen. Wenn Sie nun diese Videos in dem Videotraining bis hier angeschaut haben, haben Sie vielleicht schon nervös sich gefragt: Wann kommt es denn endlich? Wann erstellt er denn endlich eigene Funktionen? Nun in diesem Video möchte ich eine Antwort darauf geben und möchte Ihnen zeigen, wie Sie aus Prozeduren, die Sie geschrieben haben, Funktionen erstellen und warum es auch sinnvoll ist zuerst mit einer Prozedur zu beginnen und aus einer Prozedur, aus einem Makro, eine Funktion zu erstellen. Dazu habe ich eine kleine Prozedur erstellt, hier eine Primzahlenberechnung. Benutzer, Benutzerin gibt eine Zahl ein und er testet, ob diese Zahl keine Primzahl ist, das heißt, ob sie Zähler, ob sie Teiler hat oder ob sie doch eine Primzahl ist. Nun wenn ich daraus eine Funktion machen will, die ich in Excel zur Verfügung habe, dann gehe ich folgendermaßen vor: Ich markiere dieses Makro. Ich kopiere dieses Makro, am besten direkt unten drunter, fügen wir das Makro wieder ein. Und Achtung, wir hätten jetzt so zwei Makros mit dem gleichen Namen. Das dürfte nicht sein. Würde ich sie starten, würde ich eine Felehermeldung erhalten. Nein, die Makros müssen unterschiedliche Namen haben. Auch wenn ich aus dem einen Makro jetzt gleich eine Funktion mache, auch das darf nicht sein. Eine Funktion darf nicht den Namen einer Variable, nicht den Namen eines Moduls, nicht den Namen eines anderen Makros haben. Also ich gebe ihn gleich einen vernünftigen Namen. Ich nenne dich zum Beispiel mal: Bist du eine Primzahl? IstPrim. Ok. Damit ist es natürlich immer noch keine Funktion, klar. Erster wichtigste Schritt beim Umwandeln von einer Prozedur in eine Funktion. Ich ändere das Schlüsselwort Sub in Function. Function, sobald ich die Zeile verlasse, wenn Sie genau hinschauen, fehlt Ihnen vielleicht auf, aus dem End Sub hat er ein End Function gemacht, aus dem Exit Sub hier in dieser Zeile hat er auch automatisch ein Exit Function gemacht. Genau das wollte ich. Ich will aus der Prozedur eben eine Funktion machen und wie gesagt, die muss einen anderen Namen haben. Diese Funktion, die wir hier haben, die bekommt natürlich jetzt von außen einen Wert. Das heißt, hier darf ich nicht mit einer Inputbox arbeiten, das war so ein Hilfskonstrukt in meiner Prozedur, sondern ich verwende hier diese Variable, schneide sie aus, lösche übrigens auch den ganzen Rest der Zeile und füge sie hier in die Klammer ein. Einfügen. Damit wird das sauber programmieren, schreibe ich es nicht nur so, sondern schreibe ich auch noch As den Typ dieser Variable rein, übergeben eine long-Zahl, das heißt eine Ganzzahl, nur von ganzzahligen Werten überprüfen wir, ob sie eine Primzahl ist. Es hat einen kleinen Knackpunkt, wir haben hier nur die Grenze bis 2 Milliarden, also bis 10 Stellen. Würden wir es länger machen wollen, müssten wir mit einer Dezimalzahl arbeiten, dann haben wie ein kleines Problem mit dem Modulo. Ok, das bleibt jetzt einfach mal so. Also wichtig ist, die Variable, die von außen übergeben wird, wird hier in der runden Klammer übergeben. Das Ergebnis der Primzahlen-Funktion ist ein wahr oder falsch und das Ergebnis schreibe ich hinter die Klammer. Mein Ergebnis As ich bekommen ein Bollean-Wert. as Boolean. Wunderbar! Beachten Sie, von außen kommt die Variable, die wird hier deklariert. Nein, das darf nicht sein. Ich muss diese Deklaration hier löschen, sonst würde ich eine Fehlermeldung erhalten, so darf es nicht sein. Ok die Variable kommt von außerhalb, wird hier berechnet, hier bla, bla, bla. Nein. Damit ich ein Ergebnis habe, merke ich mir das Ergebnis in einer zweiten Variable, ich deklariere dim blnPrim, nenne ich sie mal, as Boolean. Ich setze meine Bollean-Variable, Bist du eine Primzahl oder nicht? blnprim Am Anfang auf dem Startwert, ich will mal sicher, du bist keine, False. Du bist keine Primzahl. Ich überprüfe alle Zahlen. Wenn du doch einen Teiler gefunden hast, ein Zähler, der dich teilt, dann kein Meldungsfenster, ist hier falsch, muss raus, sondern hier an der Stelle mache ich blnprim = True. Achtung, ich darf hier nicht Exit Function, ich darf nicht die Funktion sofort beenden, weil wir müssen noch der Funktion das Ergebnis übermitteln. Das heißt, dieses Exit Function nehme ich raus, oder noch besser, ich mache aus dem Exit Function ein Exit For. Wir können die Schleife beenden, weil wir ja einen Teiler gefunden haben. Wenn wir mindestens einen Teiler haben, dann reicht es zu wissen, diese Funktion oder diese Zahl, die diese Funktion berechnet, ist keine Primzahl. Also ist keine Primzahl. Jetzt merke ich gerade, ich habe es natürlich falsch rum gemacht. Ich muss hier sagen, du bist eine Primzahl, True, hier muss der Wert False rein. Und Sie sehen, selbst das Umwandeln von einer Prozedur in eine Funktion, erfordert doch noch einiges an Gehirnschmalz, muss man gut mitdenken und natürlich auch gut testen. Das werden wir gleich noch machen. Also am Anfang setzen wir den Wert auf True. Hier innerhalb der Schleife haben wir einen Teiler gefunden. Jetzt wissen wir, ich bin nicht Prim, ich bin keine Primzahl, False beenden die Schleife und hier statt der Messagebox meine Funktion soll nicht melden, sondern meine Funktion soll den Wert zurück geben, und das macht man folgendermaßen: Ich schreibe nochmal den Namen der Funktion istprim = natürlich nicht True oder False, sondern ich schreibe die Variable blnprim, die ich hier verwendet habe, an meinem Funktionsnamen hier rein. Ok. Was wurde passieren, wenn ich diese Funktion teste? Debuggen teste mal. Er sagt, geht nicht, so nicht. Und das ist eben der Knackpunkt, warum Sie Funktionen zuerst als Prozedur, als Sub schreiben sollten, weil so können wir es nicht testen. Ich brauche, damit ich diese Funktion testen kann, von außen noch eine andere kleine Testfunktion. Ich mache mal hier Sub test. Ich will mal wissen, melde mal bitte, istprim heißt meine Funktion, Klammer auf, und jetzt sehen Sie hier in der Klammer, die Variable, die von außen hier reinkommt, der Name der Variable wird hier angezeigt und ich kann mal testen, ob 23, Klammer zu, eine Primzahl ist. Starten wir das Ganze, F5 oder grünes Dreieck, dann sagt er, 23 ist eine Primzahl. Und 24, wie sieht es damit aus? Testen wir das Ganze. 24 ist natürlich keine Primzahl. Wunderbar! Jetzt erst könnte ich das Ganze testen. Jetzt könnte ich mit dem Debug-Einzelschritt-Modus von hier, F8, F8, ruft er auf, hier wird meine Funktion aufgerufen. Der Funktion wird der Wert 24 übergeben. Die Funktion erhält jetzt den Wert 24 und prüft F8, F8, F8, schon bei der ersten Zahl, F8, fließt er hier rein, beendet die Schleife, hüpft raus, meine Variable wurde jetzt von True auf False gesetzt, übergibt dieses Ergebnis an die Funktion, beendet die Funktion, springt wieder zurück in dieses Meldugsfenster und liefert den Wert, den ich oben berechnet habe. Nochmal langsam zusammenfassen: Wenn Sie Funktionen erstellen, meine Empfehlung, beginnen Sie erstmal mit einem Makro, mit einer Prozedur. Arbeiten Sie hier mit diesem vielleicht albernen, langweiligen, aber völlig effektiven Messagebox- und Inputbok-Fensterschen. Sie können natürlich auch Wert h reinschreiben zum Testen, kein Problem. Sie müssen den Namen ändern. Machen Sie aus der Sub eine Funktion. Wenn Sie innerhalb der Sub Variablen verwendet haben, müssen Sie die Variablen, wenn diese von außerhalb kommen, das heißt, wenn diese hier in einer Inputbox aufgerufen werden, direkt in der Klammer, am besten bitte mit dem richtigen Typ, aufgerufen werden. Schreiben Sie hinter die Variable As, ob er einen String-, ein Boolean-, ein Date-, einen Dezimal-, einen Long-Wert zurück gibt, was bekomme ich denn? Das ist saubere gute Programmierung. Innerhalb der Function kann ich natürlich den gleichen Code verwenden, muss nur darauf achten, alle Inputboxfenster sollen raus, alle Messageboxfenster sollen raus und ganz wichtig, am Ende der Funktion erhält der Funktionsname, muss der gleiche Name sein, natürlich, den berechneten Wert, der wird übergeben von rechts nach links und damit habe ich eine Funktion erstellt.

Excel: Eigene Funktionen mit VBA erstellen

Schreiben Sie Ihre eigenen Excel-Funktionen. Als erfahrener Excel-Anwender lernen Sie, wie Sie mithilfe von VBA Berechnungen mittels selbst erstellter Funktionen automatisieren.

3 Std. 4 min (33 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Exklusiv für Abo-Kunden
Erscheinungsdatum:21.01.2015

Im Training wird Excel 2013 benutzt. Die Vorgehensweisen sind aber für alle Windows-Versionen von Excel identisch und leicht übertragbar.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!