Funktionen werden stets mit geklammertem Argument aufgerufen. (Beispiel x = Sin ( a * b )). In der Klammer können Variablennamen, zu berechnende Ausdrücke aber auch weitere Funktionsaufrufe in beliebiger Komplexität stehen. In VB enthalten sind:
| Abs | Absolutwert |
| Atn | Arcustangens |
| Cos | Kosinus |
| Exp | Potenz zur Basis e |
| Fix | Ganzzahl, ohne Rundung |
| Int | größte Ganzzahl <= Argument |
| Log | natürlicher Logarithmus |
| Randomize | Initiiert Zufallsgenerator |
| Rnd | Zufallszahl, 0 <= x < 1 |
| Sgn | Vorzeichenwert |
| Sin | Sinus |
| Sqr | Quadratwurzel |
| Tan | Tangens |
Mathematische Funktionen, die in der Liste nicht enthalten sind, können definiert werden. Eine Tabelle dazu befindet sich in der VBA-Hilfe. Da die nicht immer zugänglich ist, folgt sie hier:
| Sekans | Sekans(X) = 1 / Cos(X) |
| Kosekans | Kosekans(X) = 1 / Sin(X) |
| Kotangens | Kotangens(X) = 1 / Tan(X) |
| Arkussinus | Arkussinus(X) = Atn(X / Sqr(-X * X + 1)) |
| Arkuskosinus | Arkuskosinus(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1) |
| Arkussekans | Arkussekans(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) – 1) * (2 * Atn(1)) |
| Arkuskosekans | Arkuskosekans(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1)) |
| Arkuskotangens | Arkuskotangens(X) = Atn(X) + 2 * Atn(1) |
| Hyperb. Sinus | HSin(X) = (Exp(X) - Exp(-X)) / 2 |
| Hyperb. Kosinus | HCos(X) = (Exp(X) + Exp(-X)) / 2 |
| Hyperb. Tangens | HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X)) |
| Hyperb. Sekans | HSekans(X) = 2 / (Exp(X) + Exp(-X)) |
| Hyperb. Kosekans | HKosekans(X) = 2 / (Exp(X) - Exp(-X)) |
| Hyperb. Kotangens | HKotangens(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X)) |
| Hyperb. Arkussinus | HArkussinus(X) = Log(X + Sqr(X * X + 1)) |
| Hyperb. Arkuskosinus | HArkuskosinus(X) = Log(X + Sqr(X * X - 1)) |
| Hyperb. Arkustangens | HArkustangens(X) = Log((1 + X) / (1 - X)) / 2 |
| Hyperb. Arkussekans | HArkussekans(X) = Log((Sqr(-X * X + 1) + 1) / X) |
| Hyperb. Arkuskosekans | HArkuskosekans(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X) |
| Hyperb. Arkuskotangens | HArkuskotangens(X) = Log((X + 1) / (X - 1)) / 2 |
| Logarithmus zur Basis N | LogN(X) = Log(X) / Log(N) |
Diese und andere Funktionen können einfach nachdefiniert werden. Ihr Aufruf erfolgt dann genauso, wie derjenige der vorhandenen. Solche Funktionsdefinitionen können überall im Programm (aber möglichst in einem Modul und nicht innerhalb einer "Sub") stehen. Die Syntax der Definition einer Funktion des frei wählbaren Namens (hier im Beispiel "fktName") lautet:
| Function fktName (Argumentvariable As Variablentyp, ... ) As Variablentyp [Anweisungen unter Verwendung der Argumentvariablen] End FunctionfktName = Berechnungsergebnis |
Zeichenkettenoperationen werden nicht unbedingt vom Anfänger benötigt. Trotzdem ist gut zu wissen, was prinzipiell geht. Deshalb die folgende Übersicht. Zur Verwendung der Funktionen und Anweisungen gibt es in der Visual-Basic-Hilfe, die jeweils mit dem Funktionsnamen aufrufbar ist, jede Menge Unterstützung (Erläuterungen und Aufrufbeispiele).
Zeichenerklärung:
[..] Eckige Klammern zeigen an, daß optionale Erweiterungen folgen
| Senkrechter Strich steht für "oder"
| Funktionsname | Aufruf | Funktion |
| Asc AscB AscW | num = Asc(string) num = AscB(bytefolge) num = AscW(unicodefolge) | Gibt den Zeichen-Code des ersten Buchstabens in der Zeichenfolge als Integer zurück. |
| Chr ChrB ChrW | string = Chr(zeichencode) string = ChrB(bytecode) string = ChrW(unicode) | Gibt einen Wert vom Typ String zurück, der das Zeichen enthält, das durch den Zeichen-Code beschrieben wird. |
| Format Format$ | text = Format(ausdruck,format[,...]) text = Format$(ausdruck,format[,...]) | Liefert den komplett formatierten Ausdruck als Variant (String). |
| InStr InStrB | pos = InStr(start,string1,string2,comp) pos = InStrB(start,string1,string2,comp) | pos bedeutet einen Wert vom Typ Variant (Long), der die Position des ersten Auftretens der Zeichenfolge string2 in der Zeichenfolge string1 enthält. Die Konstante comp beschreibt die Art des Textvergleiches und kann die Werte 0 oder 1 oder 2 erhalten, (die entsprechenden vb-Konstanten heißen vbBinaryCompare, vbTextCompare, vbDataBaseCompare und deuten an, wie gesucht wird.) |
| LCase LCase$ | kleinstring = LCase(string) kleinstring = LCase$(string) | Alle Buchstaben werden in Kleinbuchstaben umgewandelt. |
| Left Left$ LeftB LeftB$ | teilstring = Left(string,länge) teilstring = Left$(string,länge) teilstring = LeftB(string,länge) teilstring = LeftB$(string,länge) | Gibt einen Wert vom Typ Variant (String) zurück, der eine bestimmte Anzahl von Zeichen ab dem ersten (linken) Zeichen einer Zeichenfolge enthält. Die LeftB-Funktion wird für Byte-Daten verwendet, die in einer Zeichenfolge enthalten sind. Mit länge wird nicht die Anzahl der zurückzugebenden Zeichen angegeben, sondern die Anzahl der Bytes. |
| Len LenB | num = Len(string|variable) | Gibt einen Wert vom Typ Long zurück, der die Anzahl der Zeichen in einer Zeichenfolge oder die zum Speichern einer Variablen erforderlichen Bytes enthält. Die LenB-Funktion wird für die Byte-Daten verwendet, die in einer Zeichenfolge enthalten sind. LenB gibt nicht die Anzahl der Zeichen in einer Zeichenfolge zurück, sondern die Anzahl der Bytes, die zur Darstellung dieser Zeichenfolge verwendet werden. Mit benutzerdefinierten Typen gibt LenB die Größe im Speicher zurück, einschließlich aller Polster zwischen Elementen. |
| LSet | LSet string1 = string 2 LSet variable1 = variable2 | Anweisung. Richtet eine Zeichenfolge innerhalb einer Zeichenfolgenvariablen links aus oder kopiert eine Variable eines benutzerdefinierten Datentyps in eine Variable eines anderen benutzerdefinierten Datentyps. |
| LTrim | string = LTrim(zeichenfolge) | Schneidet die führenden Leerzeichen weg. |
| Mid Mid$ MidB Mid$ | string = Mid(string, start[, length]) string = Mid$(string, start[, length]) string = MidB(string, start[, length]) string = MidB$(string, start[, length]) | Gibt einen Wert vom Typ Variant (String) zurück, der eine bestimmte Anzahl von Zeichen aus einer Zeichenfolge enthält. Die MidB-Funktion wird für die Byte-Daten verwendet, die in einer Zeichenfolge enthalten sind. Die Argumente geben nicht die Anzahl der Zeichen an, sondern die Anzahl der Bytes. |
| Right Right$ RightB RightB$ | teilstring = Right(string,länge) teilstring = Right$(string,länge) teilstring = RightB(string,länge) teilstring = RightB$(string,länge) | Gibt einen Wert vom Typ Variant (String) zurück, der eine bestimmte Anzahl von Zeichen von der rechten Seite (dem Ende) einer Zeichenfolge enthält. Die RightB-Funktion wird für die Byte-Daten verwendet, die in einer Zeichenfolge enthalten sind. length gibt nicht die Anzahl der zurückzugebenden Zeichen zurück, sondern die Anzahl der Bytes. |
| RSet | RSet stringvariable = zeichenfolge | Anweisung. Richtet eine Zeichenfolge innerhalb eines Strings rechts aus; entfernt also nachfolgende Leerzeichen. |
| RTrim | string = RTrim(zeichenfolge) | Schneidet nachgestellte Leerzeichen ab. |
| Space | string = Space(zahl) | Erzeugt einen String mit zahl Leerzeichen |
| StrComp | erg = StrComp(string1,string2,VerglKonstante) | Vergleicht zwei Strings, Art des Vergleichs wird durch die VerglKonstante festgelegt; mögliche Einstellungen sind vbBinaryCompare, vbTextCompare |
| String | string = String(zahl,zeichen) | Erzeugt eine Zeichenfolge vom Typ Variant (String), die zahl mal das zeichen enthält. |
| Trim | string = Trim(zeichenfolge) | Schneidet führende und nachgestellte Leerzeichen weg. |
| UCase | GROSS-STRING = UCase(gross-string) | Wandelt alle Zeichen eines Strings in Großbuchstaben um |
Visual Basic ist besonders auch für Händler und Krämer (das nennt man heute "Geldadel") gedacht, deshalb gibt es eine Fülle vorgefertigter Funktionen für Berechnungen mit Geld (leider fehlt jegliche Funktion zur Vermehrung von Geld!). Um Informationen zur genauen Funktion und zum Aufruf der folgenden Funktionen zu erhalten, tippe man im Hilfe-Index "finanz...", es erscheint die Liste der 13 Funktionen, die man sich einzeln angucken kann. Trägt man diese Funktionsnamen in ein Code-Modul ein, so erscheint bei der Öffnungsklammer ein Flyer (kleines Fenster) mit kurzen Angaben zu den Argumenten.
Hinweis: Wer eine Funktionsgruppe öfter benötigt, sollte sich die Hilfeseiten ausdrucken!
| Funktionsname | Grobe Funktionsbeschreibung |
| DDB | Abschreibung eines Vermögenswertes über einen bestimmten Zeitraum mit Hilfe der geometrisch degressiven Abschreibungsmethode oder einer ausgewählten Methode |
| FV | Zukünftiger Wert einer Annuität bei regelmäßigen, konstanten Zahlungsausgängen und einem konstanten Zinssatz |
| IPmt | Zinszahlung für einen bestimmten Zeitraum einer Annuität bei regelmäßigen, konstanten Zahlungen und einem konstanten Zinssatz |
| IRR | Interner Ertragssatz für eine Folge regelmäßiger Cash Flows (Aus- und Einzahlungen) |
| MIRR | Modifizierter interner Ertragssatz für eine Folge regelmäßiger Cash Flows (Aus- und Einzahlungen); |
| NPer | Anzahl der Zeiträume für eine Annuität bei regelmäßigen, konstanten Zahlungen und einem konstanten Zinssatz |
| NPV | Netto-Barwert einer Investition bei regelmäßigen Cash Flows (Aus- und Einzahlungen) und einem Diskontsatz |
| Pmt | Auszahlung für eine Annuität bei regelmäßigen konstanten Zahlungsausgängen und konstantem Zinssatz |
| PPmt | Kapitalanteil einer Auszahlung für einen bestimmten Zeitraum einer Annuität bei regelmäßigen konstanten Auszahlungen und einem konstanten Zinssatz |
| PV | Barwert einer Annuität bei zukünftig regelmäßig und konstant zu leistenden Zahlungsausgängen und einem konstanten Zinssatz |
| Rate | Zinssatz einer Annuität pro Zeitraum |
| SLN | Arithmetische Abschreibung eines Vermögenswertes über einen bestimmten Zeitraum |
| SYD | Jahresabschreibung eines Vermögenswertes über einen bestimmten Zeitraum |
betreffen die Umwandlung von Datentypen ineinander. Diese Umwandlung, die oft automatisch erfolgt, soll in Zweifelsfällen programmiert werden, denn man kann durch Verknüpfung unverträglicher Variabler die schönsten, kaum zu findenden Fehler produzieren. Zwar bemüht sich VBA selbst, das zu vermeiden, ist aber viel zu komplex, um alle möglichen Fälle sicher zu beherrschen. Man tippe im Hilfeindex "typu..", dann erscheint unter dem Schlüsselwort "Typ-Umwandlungsfunktionen" die Übersicht. Da die Umwandlungsfunktionen einer geschickten Namenskonvention folgen, kann man sie leicht merken bzw. erraten. Sie beginne alle mit "C", darauf folgt ein drei- oder vierstelliges Kürzel des neuen Typs, also z.B. CInt, CDbl oder CDate. (Integer, Double, Datum).
Übersicht:
| Funktion | Rückgabetyp | Bereich des Arguments |
| CBool | Boolean | Eine gültige Zeichenfolge oder ein gültiger numerischer Ausdruck. |
| CByte | Byte | 0 bis 255. |
| CCur | Currency | -922.337.203.685.477,5808 bis 922.337.203.685.477,5807. |
| CDate | Date | Ein beliebiger gültiger Datumsausdruck. |
| CDbl | Double | -1,79769313486232E308 bis -4,94065645841247E-324 für negative Werte; 4,94065645841247E-324 bis 1,79769313486232E308 für positive Werte. |
| CDec | Decimal | +/-79.228.162.514.264.337.593.543.950.335 für skalierte Ganzzahlen, d.h. Zahlen ohne Dezimalstellen. Für Zahlen mit 28 Dezimalstellen gilt der Bereich +/-7,9228162514264337593543950335. Die kleinste mögliche Zahl ungleich Null ist 0,0000000000000000000000000001 |
| CInt | Integer | -32.768 bis 32.767; Nachkommastellen werden gerundet. |
| CLng | Long | -2.147.483.648 bis 2.147.483.647; Nachkommastellen werden gerundet. |
| CSng | Single | -3,402823E38 bis -1,401298E-45 für negative Werte; 1,401298E-45 bis 3,402823E38 für positive Werte. |
| Cvar | Variant | Numerische Werte im Bereich des Typs Double. Nichtnumerische Werte im Bereich des Typs String. |
| CStr | String | Rückgabe für CStr hängt vom Argument ab. |
sind teilweise intuitiv nutzbar, so liefert "Date" das Datum, "Time" die Uhrzeit, Datumsdifferenzen berechnet man mit "DateDiff", Summen mit "DateAdd", "DateValue" wandelt einen Zahleneingabe in ein Datum um etc. In der normalen VBA-Hilfe gibt es aber leider keine Gesamtübersicht. Viele Operationen werden über Formatierungsanweisungen geregelt. Der Aufruf erfogt in der Fom
| datum_zeit_string = Format$(datumswert,"formatkonstante") |
Als Datumswert kommen berechnete Werte oder aus der Systemzeit abgeleitet in Frage.
Dazu bietet die Tabelle die für Zeit- und Datumsangaben wichtigen Formatierungskonstanten. Über diese Angaben hinaus könne benutzerdefinierte Formatieranweisungen auch weitere Zeit- und Datumsformate erzeugen.
| Formatkonstante | Anzeige |
| General Date | Zeigt ein Datum und/oder eine Zeit an. Bei reellen Zahlen werden Datum und Uhrzeit angezeigt (zum Beispiel 4.3.93 05:34). Werden keine Nachkommastellen angegeben, so wird nur ein Datum (zum Beispiel 4.3.93) angezeigt. Enthält der Wert ausschließlich Nachkommastellen, so wird nur eine Uhrzeit ausgegeben (zum Beispiel 05:34). Die Anzeige von Datum und Zeit wird durch die Systemeinstellungen festgelegt. |
| Long Date | Zeigt ein Datum im langen Datumsformat (mit Wochentagsangabe) entsprechend den Systemeinstellungen an. |
| Long Time | Zeigt eine Zeit entsprechend der Einstellung für das lange Zeitformat an, einschließlich Stunden, Minuten und Sekunden ( 12:33:11 ) |
| Medium Date | Zeigt ein Datum im mittleren Datumsformat an, das von der Sprachversion der Host-Anwendung bestimmt wird. |
| Medium Time | Zeigt eine Zeit im 12-Stunden-Format mit Stunden, Minuten und einer AM/PM-Kennung an (12:45 am ) |
| Short Date | Zeigt ein Datum im kurzen Datumsformat entsprechend den Systemeinstellungen an ( 22.03.99 ). |
| Short Time | Zeigt eine Zeit im 24-Stunden-Format an ( 18:45 ) |
Eine Übersicht der ermittelten Datums- und Zeitfunktionen soll helfen, im Verdachtsfall mit Hilfe der Hilfe die richtige einzusetzen.
| Funktionsname | Aufruf | Wirkung | ||||||||||||||
| Date | Date = datumswert | Gibt einen Wert vom Typ Variant (Date) zurück, der das aktuelle Systemdatum enthält oder setzt das Systemdatum. | ||||||||||||||
| DateAdd | datum = DateAdd( kenn, zahl, datum) | Gibt einen Wert vom Typ Variant (Date) zurück, der ein Datum enthält, zu dem ein bestimmtes Zeitintervall zahl mal addiert wurde. Die Art des Intervalls wird durch kenn festgelegt. Zulässige Werte für kenn siehe unter DatePart | ||||||||||||||
| DateDiff | wert = DateDiff(kenn, datum1, datum2[, erstwochtag, erstwochedesjahres]) | Gibt einen Wert vom Typ Variant (Long) zurück, der das Zeitintervall zwischen zwei bestimmten Terminen angibt. Dabei bestimmtkenndie Einheit. Die möglichen Werte fürkennsiehe unter DatePart | ||||||||||||||
| DatePart | wert = DatePart(kenn, datum[, erstwochtag, erstwochedesjahres]) | Gibt einen Wert vom Typ Variant (Integer) zurück, der eine unter kenn geforderte Angabe, Monatsnummer, Wochennummer, etc. liefert. kenn kann sein:
Die Eingabe der Kennung erfolgt mit Anführungsstrichen. | ||||||||||||||
| DateSerial | intDatum = DateSerial(jahr, monat, tag) | Gibt einen Wert vom Typ Variant (Date) zurück, der die angegebene Jahres-, Monats- und Tageszahl enthält. | ||||||||||||||
| Day | tag = Day(datum) | Gibt einen Wert vom Typ Variant (Integer) zurück, der den Tag des Monats als ganze Zahl im Bereich von 1 bis 31 angibt. datum muß vom Typ Date (interner Datumswert) sein. | ||||||||||||||
| DateValue | datum = DateValue(datumsangabe) | Gibt einen amtlichen Datumstyp (Variant) zurück, die datumsangabe kann stark variieren | ||||||||||||||
| Hour | stunde = Hour(datum) | Gibt einen Wert vom Typ Variant (Integer) zurück, der die Stunde des Tages als ganze Zahl im Bereich von 0 bis 23 angibt. datum muß vom Typ Date (interner Datumswert) sein. | ||||||||||||||
| Minute | min = Minute(datum) | Gibt einen Wert vom Typ Variant (Integer) zurück, der die Minute in der Stunde als ganze Zahl im Bereich von 0 bis 59 angibt. datum muß vom Typ Date (interner Datumswert) sein. | ||||||||||||||
| Month | mon = Month(datum) | Gibt einen Wert vom Typ Variant (Integer) zurück, der den Monat im Jahr als ganze Zahl im Bereich von 1 bis 12 angibt. datum muß vom Typ Date (interner Datumswert) sein. | ||||||||||||||
| Now | datumzeitstring = Now | Gibt einen Wert vom Typ Variant (Date) zurück, der das aktuelle Datum und die aktuelle Zeit aus den Einstellungen für das Systemdatum und die Systemzeit auf Ihrem Computer angibt. | ||||||||||||||
| Second | sek = Second(datum) | Gibt einen Wert vom Typ Variant (Integer) zurück, der die Sekunden in der Minute als ganze Zahl im Bereich von 0 bis 59 angibt. datum muß vom Typ Date (interner Datumswert) sein. | ||||||||||||||
| Time | zeitkonst = Time Time = neuzeit | Gibt einen Wert vom Typ Variant (Date) zurück, der die aktuelle Systemzeit angibt bzw. es kann die Systemzeit gesetzt werden. | ||||||||||||||
| Timer | wert = Timer | Gibt einen Wert vom Typ Single zurück, der die Anzahl der seit Mitternacht vergangenen Sekunden angibt. | ||||||||||||||
| TimeSerial | zeit = TimeSerial(stunden, minuten, sekunden) | Gibt einen Wert vom Typ Variant (Date) zurück, der die Uhrzeit für eine bestimmte Stunde, Minute und Sekunde im internen Format enthält. | ||||||||||||||
| TimeValue | time = TimeValue(zeitangabe) | Gibt einen amtlichen Zeitwert vom Typ Variant (Date) zurück, der die Uhrzeit gemäß beliebiger zeitangabe enthält. | ||||||||||||||
| Weekday | woche = Weekday(datum[, firstdayofweek]) | Gibt einen Wert vom Typ Variant (Integer) zurück, der den Wochentag als ganze Zahl angibt. datum muß ein interner Datumswert (Typ Date) sein | ||||||||||||||
| Year | jahr = Year(datum) | Gibt einen Wert vom Typ Variant (Integer) zurück, der das Jahr als ganze Zahl angibt. datum muß ein interner Datumswert (Typ Date) sein |
Zur Anwendung von Datumsfunktionen vergleichen Sie bitte das Beispielprogramm.
VBA bietet weitere Funktionsgruppen, die z. T. sehr mächtig, aber auch kompliziert im Aufruf sind. Einen Überblick hole man sich in der VBA-Hilfe.
Wer Programmcode aus anderen Programmiersprachen übernehmen will, suche in der Hilfe nach Funktionsbezeichnungen. Es sind fast alle Befehle älterer Basic-Versionen und aus Pascal vorhanden und nicht einmal in Büchern vollständig dokumentiert. Da immer neue Versionen von VBA auf den Markt kommen, gewöhne man sich an, die jeweils mitgelieferte Hilfe zu nutzen.