Mathematische VBA-Funktionen

Abseits der Grundrechenarten kommen mathematische Berechnungen sowohl immer wieder in VBA-Routinen zum Einsatz, wie auch in Abfragen auf Tabellenfelder. Einen überblick über das, was VBA uns zu diesem Thema anzubieten hat, zeigen wir im Folgenden – und ebenso, wie sich der Funktionsumfang durch die Excel-Bibliothek erweitern lässt.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1506_Mathe.accdb

Die Bibliothek Math von VBA

öffnen Sie den Objektkatalog des VBA-Editors und wählen links oben aus der Combobox den Eintrag VBA aus. Markieren Sie dann die Zeile Math in der Klassenauflistung links. Rechts werden Ihnen nun die Funktionen der Klasse angezeigt – siehe Bild 1.

Die VBA-Klasse Math im Objektkatalog

Bild 1: Die VBA-Klasse Math im Objektkatalog

Ziemlich überschaubar, was uns da geboten wird. Gerade mit zwölf Methoden werden wir beglückt. Wenn es um naturwissenschaftliche oder finanzielle Berechnungen geht, dann bleibt Ihnen nicht erspart, die komplexeren Funktionen selbst in Modulen nachzurüsten und zu programmieren.

Aber durchlaufen wir einmal das Vorhandene. Zunächst für die einfacheren Methoden…

Abs gibt den Absolutwert einer Zahl zurück. Das bedeutet nichts anderes, als dass eine negative Zahl in eine positive verwandelt wird. +13 und -13 haben beide den gleichen Absolutwert 13.

Sgn ist ähnlich, gibt aber lediglich das Vorzeichen der Zahl zurück. Allerdings nicht als String, sondern als Zahl. Jede Zahl größer als 0 ergibt eine 1, jede kleiner als 0 eine -1. Nur bei 0 ist auch der Rückgabewert eine 0. Round rundet eine Fließkommazahl auf eine wählbare Anzahl von Nachkommastellen:

  Round (2.4674)
> 2,47

Lassen Sie Vorsicht walten, wenn es um das Runden von Zahlen geht, besonders wenn es um Währungsberechungen handelt! Denn dort ist Runden nicht gleich Runden. Mathematisches Runden und kaufmännisches Runden etwa unterscheiden sich. Unterziehen Sie einmal die Zahl 2,465 einem VBA-Round. Als Ergebnis erhalten Sie 2,46! Die 5 am Ende wird also nicht aufgerundet. Für korrektes Runden benötigen Sie daher eine eigene Funktion, die etwa so aussähe:

Function Round2( _
    No As Variant, _
    Dgts As Long) _
    As Variant
    Dim N As Double
    Dim F As Double
    F = 10 ^ Dgts
    N = 0.5 + No * F
    Round2 = CLng(N) / F
End Function

Hier wird F die Zehnerpotenz der Nachkommastellen zugewiesen. Für 2 stünde in der Variablen dann die 100. Das wird mit der übergebenen Zahl No multipliziert und 0.5 addiert.

Schließlich wird per CLng der Nachkommateil abgeschnitten und das Ergebnis wieder durch den Faktor F dividiert. Sie können das im Modul mdlMathe der Beispieldatenbank nachvollziehen, indem Sie die Routine TestRound aufrufen.

Rnd im Verein mit Randomize sind keine mathematischen Funktionen im eigentlichen Sinne. Rnd erzeugt eine Zufallszahl (Single) im Bereich von 0 bis 1. Um andere Wertebereiche für die Zufallszahlen zu generieren, multiplizieren Sie einfach den Rückgabewert mit einem Faktor und/oder addieren Werte dazu. Beispiel für eine Funktion, die Zufallszahlen im Bereich 10 bis 100 generiert:

Function Rnd100() As Single
     Randomize
     Rnd100 = 10 + 90 * Rnd()
End Function

Das Randomize können Sie auch weglassen. Es initialisiert lediglich den internen Generator von VBA neu, der unter anderem auf der Systemzeit beruht und darauf eine Sequenz ablaufen lässt. Die Gefahr von Wiederholungen ist aber nahezu ausgeschlossen. Mit Sqr ermitteln Sie die Quadratwurzel einer Zahl. Die Funktion ist weitgehend überflüssig, da das Ergebnis auch über Potenzierung zu erhalten ist:

  Sqr(10)
 10 ^ 0.5

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar