********************************************** * * * Excel-Funktionen und VBA-Funktionen * * * ********************************************** Es gibt Excel-Funktionen und VBA-Funktionen, das sind zwei unterschiedliche Befehlssaetze. Das liegt etwa daran, dass VBA, Visual Basic for Applications, fuer die Applikation Excel benutzt werden kann, aber auch fuer die anderen Office Anwendungen wie Word oder Outlook benutzt werden kann. VBA ist also eine etwas allgemeinere Sache als nur Excel. Eine Uebersicht ueber alle Excel-Funktionen bekommt man, wenn man auf das fx-Symbol, das Insert Function Symbol, klickt. Das befindet sich in der Zeile direkt ueber dem eigentlichen Excel-Sheet mit den Zellen, also direkt in der Zeile ueber den Buchstaben A,B,C,.. Klicken Sie mal drauf und sehen Sie sich etwas um. Etwa: -> Math & Trig -> Engineering (Bessel-Funktionen, komplexe Zahlen) -> Date & Time Wenn man eine Excel-Funktion (englisch: Worksheet Function) auf einem Excel-Sheet in einer Zelle benutzen moechte, muss man immer mit einem Gleichheitszeichen "=" beginnen, die Syntax ist also =functionname(parameters) Probieren wir ein paar Sachen aus: -> week3.xlsm - Fakultaet, Doppelfakultaet, Pi - Binomialkoeffizienten - Now, Minute, Weekday, Day - die Besselfunktion J_0(x) auf dem Intervall [0,15] - die Dichte phi(x) der Normalverteilung und das Integral Phi(x) davon; das Inverse Phi^{-1} (das Phi(x) werden wir naechste Woche brauchen, wenn wir eine benutzerdefinierte Funktion fuer die Black-Scholes Formeln schreiben wollen) Eine schoene Uebersicht ueber die VBA-Funktionen bekommt man etwa auf der Seite https://vba-tutorial.de/ und dann links oben "Funktionsreferenz" anklicken, man kommt dann zu https://vba-tutorial.de/referenz/ Wenn man sich etwa die Mathematik-Funktionen anschaut, stellt man fest, dass das deutlich weniger Funktionen sind als die- jenigen, die im Insert Function Dialog-Fenster als worksheet functions zur Verfuegung gestellt werden. Etwa fehlt die FACT(n)- Funktion fuer Fakultaeten oder die COMBIN(n,k)-Funktion fuer Binomial-Koeffizienten oder die ASIN(y)-Funktion fuer die Umkehrfunktion arcsin vom Sinus. Deshalb gibt es eine Funktionalitaet, wie man Excel-Funktionen oder Worksheet-Functions in VBA benutzen kann, und zwar muss man dazu in VBA die Syntax result = Application.WorksheetFunction.Combin(10,2) oder result = Excel.WorksheetFunction.Combin(10,2) eingeben. Die Syntax result = WorksheetFunction.Combin(10,2) scheint auch zu funktionieren. Allerdings sind worksheet functions, die man in VBA benutzt, deutlich langsamer als VBA functions. Etwa ist die Funktion Excel.WorksheetFunction.Ln() deutlich langsamer als die VBA Funktion log(), die beide dasselbe Resultat liefern. Dazu werden wir in der Uebung ein Beispiel betrachten. Dasselbe gilt etwa fuer die Wurzel-Funktion, die es ebenfalls in VBA und in Excel gibt, auch wieder mit unterschiedlichen Funktionsnamen: in VBA: sqr(16) ' = 4 in einem englischen Excel: sqrt(16) in einem deutschen Excel: Wurzel(16) Werfen wir noch einen Blick auf die Datums-Funktionen in VBA: Wir moechten eine VBA-Funktion schreiben (oder aus dem Funktions- Katalog heraussuchen, falls es sowas schon gibt), die uns zu einem gegebenem Datum (eine Variable vom Typ "Date") den Wochentag (also Montag, Dienstag,..) zurueckgibt. Wir muessten uns also zunaechst mal ein Auflistung der VBA-Funktionen anschauen: Wir gehen zu https://www.vba-tutorial.de/referenz/ und schauen dann unter "Datum, Uhrzeit": es gibt da etwa die Funktionen Weekday und WeekdayName, schauen wir da rein: Weekday gibt nur eine Zahl zurueck, nicht den Namen, und WeekdayName gibt zwar den Namen zurueck, braucht aber eine Zahl zwischen 1 und 7, akzeptiert also kein Datum. Also machen wir etwa folgendes: ' ' ..some code.. -> week3.xlsm '