Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2006.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Lernen Sie die mathematischen Funktionen von VBA kennen.

Techniken

VBA, mathematische Funktionen

Voraussetzungen

Access 97 und höher

Mathematische Funktionen

Roland Grothe, Hanau, und André Minhorst, Duisburg

"Mathe! - Gut, dass ich damit seit der Schulzeit (seit dem Studium) nichts mehr zu tun habe!" - das denken jetzt möglicherweise einige Leser. Früher oder später holt einen diese Zeit wieder ein, denn auch wenn die trigonometrischen Funktionen von VBA eher selten zum Einsatz kommen dürften, gibt es durchaus interessante Kandidaten: Oder behauptet da irgendjemand, er habe noch nie beispielsweise eine Zufallszahl ermitteln müssen?

In diesem Beitrag stellen wir Ihnen die mathematischen Funktionen von VBA vor. Wenn auch die meisten dieser Funktionen nur in recht speziellen Anwendungen zum Einsatz kommen werden, sind doch einige darunter, die Ihnen auch bei der Lösung ganz "normaler" Entwicklerprobleme hilfreich zur Seite stehen.

Einführung

Mathematische Funktionen sind prinzipiell nichts anderes als eine für den Anwender vereinfachte Form der Eingabe komplizierter Berechnungen.

Durch die Verwendung der eingebauten mathematischen Funktionen werden Ihre Anwendungen übersichtlicher und Ihre Gedankengänge bei der Entwicklung auch für andere Benutzer nachvollziehbar. Tab. 1 zeigt in einer Übersicht die in diesem Beitrag besprochenen Funktionen.

Anzumerken ist dabei, dass die englischen Funktionen in VBA und SQL und die deutschen Varianten beispielsweise im Abfrageentwurf, im Ausdruckseditor oder in Eigenschaften von Datenbankobjekten oder Steuerelementen zum Zuge kommen.

Um Ihnen das Ausprobieren der hier beschriebenen Funktionen zu erleichtern, enthält die Beispieldatenbank das Formular frmBeispielmathematischeFunktionen, in dem Sie eigene Parameter zuweisen und sich die jeweiligen Resultate aller Funktionen ansehen können. Überschreiben Sie dazu einfach die vorgegebenen Werte in den Eingabefeldern.

Die Winkelfunktionen

Diese oft auch als trigonometrische oder Kreisfunktionen bezeichneten Funktionen stellen in der elementaren Geometrie die Seitenverhältnisse in einem rechtwinkligen Dreieck dar.

Alle Funktionen erwarten als Parameter einen Zahlenwert, der entweder einen Winkel im Bogenmaß (Sin(), Cos(), Tan()) oder das Verhältnis zweier Seiten des Dreiecks (Atn()) angibt.

Funktion (englische Bezeichnung)

Funktion (deutsche Bezeichnung)

Ergebnis/Beschreibung

Sin(Zahl)

Sin(Zahl)

Sinus des Winkels Zahl (im Bogenmaß)

Cos(Zahl)

Cos(Zahl)

Kosinus des Winkels Zahl (im Bogenmaß)

Tan(Zahl)

Tan(Zahl)

Tangens des Winkels Zahl (im Bogenmaß)

Atn(Zahl)

ArcTan(Zahl)

ArkusTangens des Winkels Zahl (Ergebnis im Bogenmaß)

Abs(Zahl)

Abs(Zahl)

Absolutwert des Arguments Zahl

Exp(Zahl)

Exponential(Zahl)

Exponentialwert des Arguments Zahl

Log(Zahl)

Logarithmus(Zahl)

Natürlicher Logarithmus des Arguments Zahl

Int(Zahl)

Int(Zahl)

Nächstkleinere Ganzzahl des Arguments Zahl

Fix(Zahl)

Fix(Zahl)

Ganzzahliger Anteil des Arguments Zahl

Rnd(Zahl)

ZZG(Zahl)

Zufallszahl. Das optionale Argument Zahl bestimmt, wie die Zufallszahl ermittelt wird.

Sgn(Zahl)

Vorzchn(Zahl)

Vorzeichen des Arguments Zahl

Sqr(Zahl)

QWurzel(Zahl)

Quadratwurzel des Arguments Zahl

Tab. 1: Mathematische Funktionen und ihre Beschreibung

Abb. 1: In der Beispieldatenbank sehen Sie die Ergebnisse aller in diesem Kapitel behandelten Funktionen.

Die Funktion Sin()

Die Funktion berechnet aus einem Winkel das Längenverhältnis der dem Winkel gegenüberliegenden Seite (Gegenkathete) zu der Hypothenuse (längste Seite) eines rechtwinkligen Dreiecks. Als Parameter muss der Winkel im Bogenmaß angegeben werden. Steht eine Winkelangabe nur in Grad zur Verfügung, muss diese zuvor in das Bogenmaß umgerechnet werden. Die Formel dazu lautet folgendermaßen:

Bogenmaß = Grad * Pi / 180

Dabei ist Pi eine mathematische Konstante mit dem Näherungswert 3,1415926535897
932. Statt diese Konstante direkt im Code anzugeben, kann man sie auch mit folgender Funktion berechnen lassen:

Pi = 4 * Atn(1) 

Um in einem berechneten Steuerelement (s. Abb. 1) beispielsweise den Sinus eines Winkels, dessen Größe in einem Formularfeld txtWinkelB definiert ist, zu berechnen, verwenden Sie folgende Syntax für die Eigenschaft Steuerelementinhalt:

=Sin([txtWinkelB])

Statt eines direkten Feldbezugs kann auch ein komplexerer Ausdruck an die Funktion übergeben werden.

Dies ist zum Beispiel dann notwendig, wenn die Winkelangabe nur in Grad verfügbar ist, wie in folgendem Beispiel:

= Sin([txtWinkelG] * 3,1415926535897932/180)

Das Ergebnis ist ein Wert des Datentyps Double im Bereich von -1 bis 1.

Die Funktion Cos()

Der Cosinus ist die Gegenfunktion des Sinus und liefert das Längenverhältnis der dem Winkel anliegenden Seite (Ankathete) zu der Hypothenuse eines rechtwinkligen Dreiecks.

Auch hier ist als Parameter der Winkel im Bogenmaß anzugeben:

=Cos([txtWinkelB])

Das Ergebnis ist ein Wert des Datentyps Double im Bereich von -1 bis 1.

Die Funktion Tan()

Der Tangens liefert das Längenverhältnis der dem Winkel gegenüberliegenden Seite (Gegenkathete) zu der dem Winkel anliegenden Seite (Ankathete) eines rechtwinkligen Dreiecks.

Auch hier muss als Parameter der Winkel im Bogenmaß angegeben werden:

=Tan([txtWinkelB])

Das Ergebnis ist ein Wert des Datentyps Double, wobei der Wert im Bereich der Winkel 90° und 270° extrem groß wird.

Die Funktion ArcTan()

Der Arkustangens ist die Umkehrfunktion der Funktion Tan() und berechnet aus dem Längenverhältnis der dem Winkel gegenüberliegenden Seite (Gegenkathete) zu der dem Winkel anliegenden Seite (Ankathete) eines rechtwinkligen Dreiecks dessen Winkel im Bogenmaß:

=Atn([txtWinkelB])

Das Ergebnis ist ein Wert des Datentyps Double zwischen -Pi/2 und Pi/2.

Um das Ergebnis dieser Funktion in einen Winkel mit der Einheit Grad umzurechnen, verwenden Sie folgende Formel:

Grad = Bogenmaß * 180 / Pi

Die Funktionen Logarithmus() und Exponential()

Diese beiden Funktionen erlauben die Berechnung des natürlichen Logarithmus einer Zahl zur Basis e (Logarithmus()) beziehungsweise als Umkehrfunktion die Konstante e, potenziert mit der als Parameter übergebenen Zahl (Exponential()).

So liefert der Ausdruck

Logarithmus(10)

als Ergebnis den Wert 2.30258509299405, während

Exponential(2.30258509299405)

den Wert 10 zurückgibt.

Manchmal wird jedoch nicht der natürliche Logarithmus, sondern der Logarithmus zu einer beliebigen anderen Basis, beispielsweise 10, benötigt. Dieser Wert errechnet sich aus dem folgenden Ausdruck, der den natürlichen Logarithmus der übergebenen Zahl durch den Logarithmus der gewünschten Basis dividiert:

Logarithmus (Zahl) / Logarithmus (10)

Die Zahl e ist die Basis des natürlichen Logarithmus und wird oft auch als Euler’sche Zahl bezeichnet. Sie hat ungefähr den Wert 2,718282. Um Laufzeitfehler (Überlauf) zu vermeiden, sollten Sie darauf achten, dass die Werte für den Parameter Zahl den mathematischen Anforderungen an die Funktionen gerecht werden. Bei der Funktion Logarithmus() sind alle numerischen Ausdrücke erlaubt, die einen Wert größer 0 haben. Die Funktion Exponential() erwartet einen beliebigen numerischen Ausdruck, der allerdings den Wert 709,78271283 nicht überschreiten darf.

Die Funktion QWurzel()

Diese Funktion berechnet die Quadratwurzel einer Zahl und liefert diese als Wert des Datentyps Double zurück. Der englische Name der Funktion leitet sich aus dem englischen Begriff "square root" ab.

Um beispielsweise die Quadratwurzel aus 2 zu "ziehen", verwenden Sie die folgende Syntax:

=QWurzel(2)

Das Ergebnis dieses Ausdrucks ist etwa die Zahl 1,4142.

Mit der eingebauten Wurzelfunktion kann lediglich die Quadratwurzel (auch zweite Wurzel genannt) einer Zahl berechnet werden. Um Wurzeln höherer Ebenen zu ziehen, müssen Sie den Wert mit dem Kehrwert der gewünschten Ebene potenzieren. Um beispielsweise die dritte Wurzel aus 125 zu ziehen, verwenden Sie den folgenden Ausdruck:

=125^(1/3)

Als Parameter erlaubt die Funktion jeden numerischen Ausdruck, der größer oder gleich 0 ist.

Die Funktion Abs()

Diese einfache Funktion erwartet als Parameter einen beliebigen numerischen Wert und liefert einen Wert des gleichen Datentyps zurück. Dieser Wert entspricht dem Betrag des übergebenen Wertes, also der Zahl ohne Vorzeichen.

So liefern beispielsweise sowohl

Abs(12)

als auch

Abs(-12)

den numerischen Wert 12 zurück.

Diese Funktion lässt sich sehr gut als automatische Eingabekontrolle verwenden, um sicherzustellen, dass der Anwender nur positive (oder negative) Werte in ein Feld eingibt. Bei einer Reisekostenabrechnung weiß der Anwender beispielsweise oft nicht, ob er das Feld Spesen als negativen oder positiven Wert eingeben muss. Da das richtige Vorzeichen für die Berechnung jedoch entscheidend ist, können Sie das Feld txtSpesen mit dem Ausdruck

Me!txtSpesen =Abs(Me!txtSpesen)

als positiven beziehungsweise mit

Me!txtSpesen =Abs(Me!txtSpesen) * -1

als negativen Wert fest definieren, ohne dass der Anwender davon etwas merkt.

Die Funktion Vorzchn()

Manchmal ist es erforderlich, lediglich das Vorzeichen einer Zahl zu kennen. Diese Information liefert die Funktion VorZchn(). Sie erwartet als Parameter Zahl einen beliebigen numerischen Wert und liefert je nach dessen Vorzeichen die Werte aus Tab. 2 als Datentyp Integer zurück.

Zahl

Rückgabewert

> 0

1

< 0

-1

= 0

0

Tab. 2: Rückgabewerte der Funktion Vorzchn()

So liefert beispielsweise der Ausdruck

Vorzchn(-12)

den Wert -1 zurück.

Die Funktionen Int() und Fix()

Diese Funktionen sind fast identisch. Beide erwarten als Parameter einen beliebigen numerischen Ausdruck und liefern den ganzzahligen Anteil dieses Wertes zurück. Der zurückgelieferte Wert hat dabei den gleichen Datentyp wie der Parameterwert.

So liefert beispielsweise der Ausdruck

Int(235,67)

den Wert 235 zurück. Hat der Parameter den Wert Null, ist auch das Ergebnis der Funktion Null. Der Unterschied zwischen den Funktionen Fix() und Int() zeigt sich nur bei der Berechnung negativer Werte.

Während Fix() lediglich die Nachkommastellen abschneidet und damit aus

Fix(-235,67)

den Wert -235 ermittelt, liefert Int() grundsätzlich die nächstkleinere Zahl zurück. Das Resultat von

Int(-235,67)

ist demnach -236.

Eine häufig benötigte Anwendung ist die permanente Rundung eines Rechenergebnisses auf eine bestimmte Anzahl Nachkommastellen.

Dies ist stets dann notwendig, wenn beispielsweise ein Betrag nicht nur mit zwei Stellen nach dem Komma angezeigt, sondern auch später nur mit diesen zwei Stellen gerechnet werden soll. Der Ausdruck

Int(235,6789 * 100)/100

multipliziert den Wert erst einmal mit dem Faktor 100, bildet daraus den Integerwert und dividiert dieses Ergebnis wiederum durch 100.

Resultat dieser Berechnung ist ein Wert mit maximal zwei Nachkommastellen, der allerdings noch nicht korrekt aufrundet. Dieses Problem lösen Sie durch die Addition von 0,5, bevor der Integerwert gebildet wird. Der Ausdruck

Int(235,6789 * 100+0,5)/100

berücksichtigt nun auch dieses Problem. Um auf eine andere Anzahl Kommastellen zu runden, verändern Sie lediglich den Multiplikationsfaktor. Dieser beträgt 10n, wobei n die Anzahl der gewünschten Kommastellen darstellt.

n kann übrigens auch negativ sein, um Rundungen vor dem Komma zu erzeugen.

Die in Access eingebauten Funktionen beschränken sich auf einige wenige, häufiger verwendete Funktionen.

Mehr ist allerdings auch nicht notwendig, da sich alle mathematischen Funktionen aus Berechnungen anderer Funktionen ableiten lassen.

Mehr dazu finden Sie in der Online-Hilfe unter dem Stichwort "abgeleitete mathematische Funktionen" (s. Abb. 2).

Abb. 2: Eine Übersicht einiger abgeleiteter mathematischer Funktionen finden Sie in der VBA-Referenz.

Die Funktion ZZG()

Mit dieser Funktion stellt Access dem Anwender den Zugriff auf den internen (Pseudo-)Zufallszahlengenerator zur Verfügung.

ZZG() liefert, abhängig vom Parameter Zahl, einen Wert, der größer oder gleich 0, aber kleiner als 1 ist.

Es handelt sich dabei deshalb um einen Pseudozufallszahlengenerator, weil die generierte Zahl von einem Startwert abhängt und daher auch nicht zufällig erzeugt wird.

Dieser Startwert kann der Funktion ZZG() als optionaler Parameter Zahl übergeben werden, wobei die Werte aus Tab. 3 möglich sind.

Zahl

Zufallszahl

<0

Immer die gleiche Zahl, die sich aus dem Startwert Zahl ergibt

>0

Eine Zufallszahl, die als Startwert die zuletzt erzeugte Zufallszahl verwendet

=0

Die gleiche Zahl wie beim letzten Aufruf der Funktion

Tab. 3: Mögliche Startwerte der Funktion ZZG()

Lassen Sie den Parameter Zahl weg, verhält sich die Funktion als sei Zahl ein positiver Wert.

Um ganzzahlige Zufallszahlen innerhalb eines bestimmten Bereichs zu erzeugen, muss das Ergebnis der ZZG()-Funktion mit dem Ausdruck

Int((Max - Min + 1) * ZZG() + Min)

bearbeitet werden, wobei Max die größte und Min die kleinste Zahl des zulässigen Bereichs darstellt.

Auf der Registerkarte ZZG() des Beispielformulars finden Sie eine Schaltfläche Würfeln, die das Formular frmWürfel aufruft. Einziges Steuerelement dieses Formulars ist ein Textfeld, dessen Inhalt beim Öffnen des Formulars berechnet und zugewiesen wird. Der Ausdruck

Me!Text0=Int((6 - 1 + 1) * Rnd() + 1)

liefert einen Zufallswert zwischen 1 und 6 und simuliert somit das Rollen eines Würfels. Sie finden ihn in der Ereigniseigenschaft Beim Öffnen des Formulars frmWürfel (s. Abb. 3).

Da diese Codezeile aus dem Formularmodul des Formulars frmWürfel stammt, muss der Funktionsname ZZG in diesem Fall durch das englische Equivalent Rnd() ersetzt werden.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.