|
Das kaufmännische Runden zählt eigentlich zu den
Allerweltsfunktionen im finanzmathematischen Bereich. Da wundert es,
dass Access keine eigene Rundungsfunktion besitzt. Um Werte dennoch
gerundet auszugeben, müssen Sie eine eigene, benutzerdefinierte
Funktion schreiben, die Sie dann zum Beispiel in Abfragen oder in
VBA-Prozeduren einsetzen können.
Um gleich eventuellen Einwänden vorzubeugen: Es stimmt, dass in
Access 2000 die VBA-Funktion "Round" eingeführt wurde.
Doch die liefert zum Teil merkwürdige Resultate, weshalb sie für
eine sinnvolle Rundung ausscheidet. Probieren Sie es aus, indem Sie
den Visual Basic-Editor mit Alt+F11 aus Access heraus
starten. Lassen Sie sich dann über das Menü Ansicht
das Direktfenster anzeigen.
Darin geben Sie folgendes ein:
?Round(3.5)
Nach einem Druck auf die Return-Taste erhalten Sie das auf
eine ganze Zahl gerundete Ergebnis "4". Das ist korrekt.
Versuchen Sie es dann aber noch einmal mit
?Round(4.5)
Wieder ist das Ergebnis "4", was offensichtlich nicht der
kaufmännischen Rundung entspricht. Wenn Sie auf ganze Zahlen (ohne
Nachkommastellen) runden, liefert "Round" immer nur gerade
Zahlen.
Ebenfalls unbrauchbar für die Rundung ist der
Einsatz eines Zahlenformats mit der entsprechenden Anzahl an
Nachkommastellen, wie es beispielsweise im Währungsformat umgesetzt
wird. Dabei kann es zu Diskrepanzen zwischen Anzeigegenauigkeit und
Rechengenauigkeit kommen, denn intern rechnet Access immer mit den
tatsächlich vorhandenen Werten. Es führt also kein Weg an einer
benutzerdefinierten Funktion vorbei. Die im Anschluss vorgestellte
Funktion erlaubt sogar die Angabe der Stellen, auf die gerundet
werden soll, wobei als Standardwert "0" vorgegeben wird.
Am besten beginnen Sie mit einem neuen, leeren Modul, das Sie auf
dem Datenbankregister "Module" anlegen. Im Codefenster
geben Sie folgende Zeilen ein:
Public Function funcRunden(Wert,
Optional Stellen = 0) _
As Double
funcRunden = Sgn(Wert) * Int(Abs(Wert) * _
(10 ^ Stellen) + 0.5) / (10 ^ Stellen)
End Function
Die Funktion sieht komplexer aus als sie ist. Im
Prinzip verschiebt sie das Komma im zu rundenden Wert nur um die
vorgegebene Anzahl an Stellen, wandelt das Resultat in eine ganze
Zahl um und setzt das Komma zum Schluss wieder an die ursprüngliche
Stelle.
Um keine Probleme mit negativen Zahlen zu bekommen, wird nur mit
absoluten Zahlen gerechnet und das Vorzeichen durch die
Multiplikation mit "Sgn(Wert)" gesetzt. Merkwürdig sieht
auf den ersten Blick auch die Addition von "0,5" aus. Das
ist nötig, da die Funktion "Int", mit der Sie die
Umwandlung in eine ganze Zahl vornehmen, nicht rundet. Sie schneidet
einfach nur die Nachkommastellen ab, weshalb Sie vorher
"0,5" addieren müssen.
Nachdem Sie das Modul gespeichert haben, steht die Funktion in der
gesamten Datenbank - also zum Beispiel auch in Abfragen - zur Verfügung.
Sie könnten auf diese Weise ein berechnetes Abfragefeld anlegen,
das bei einer Bestelltabelle mit den Feldern "Einzelpreis"
und "Anzahl" wie folgt aussieht:
RundeSumme: funcRunden([Einzelpreis]*[Anzahl];2)
Das Produkt aus Einzelpreis und Anzahl wird damit auf zwei
Nachkommastellen gerundet, und zwar so, dass Access auch intern
anschliessend nur noch mit dieser Genauigkeit rechnet.
|