In vorangegangenen Beiträgen wurde bereits gezeigt, wie man Integer in einen String umwandeln kann oder ein Datum als Zeichenkette mit VBA ausgeben kann. In diesem Beitrag soll es nun darum gehen Gleitkommazahlen, also Variablen vom Datentyp Double in einen String zu konvertieren.
Konvertierungen zu String immer mit CStr()
Im VBA gibt es die CStr(arg)-Funktion, welche leicht einprägsam ist, wenn man sich dies als Abkürzung für Convert-String merkt. Diese Funktion ist mächtig überladen. Denn als Argumen arg, kann die Funktion ziemlich viele Standard-Datentypen, Integer, Bool, Date und auch Double übernehmen, diese in eine Zeichenkette umwandeln.
Beispiel
Als Beispiel wollen wir hier mal die Eulersche Zahl in einen String umwandeln und in einer MessageBox ausgeben. Der Code sieht dann wie folgt aus:
Sub DoubleToString()
Dim myDouble As Double
Dim myString As String
myDouble = 2.71828182845905
myString = "Die Eulersche Zahl e=" + CStr(myDouble)
MsgBox (myString)
End Sub
Führt dieses Makro aus, dann bekommt man die folgende Ausgabe in einer Messagebox:
Dezimalstellen: Verwendung von Format()-Funktion
An den Beispiel sieht man, dass die volle Länge der Double-Variabel ausgegeben wird. Wenn man Texte verarbeitet ist dies aber meistens nicht gewünscht; hier möchte man eine angemessene Anzahl an Dezimalstellen darstellen, z.B. nur zwei Nachkommastellen.
Eine Alternative Double in String umzuwandeln stellt die Funktion Format(doubleValue, formatStr) dar. Hier kann man über einen Formatierungs-String formatStr definieren, auf wie viele Nachkommastellen die Gleitkommazahl reduziert werden soll. Um die Systematik zu verstehen:
- “0.00”…..definiert die Formatierung auf 2 Dezimalstellen
- “0.000”…definiert eine Formatierung auf 3 Nachkommastellen
Bleiben wir bei unserem Beispiel mit der Eulerschen Zahl, dann sieht der VBA-Code wie folgt aus:
Sub DoubleToString()
Dim myDouble As Double
Dim myString As String
myDouble = 2.71828182845905
myString = "Die Eulersche Zahl e=" + Format(myDouble, "0.00")
MsgBox (myString)
End Sub
Als Ergebnis wird eine MessageBox mit der folgenden Ausgaben bei Ausführung des Codes angezeigt:
Wie man an dem Beispiel sehr gut sehen kann, ist das gute dabei, dass von der Format-Funktion automatisch das Runden übernommen wird. Man muss also keinen separaten Code zum Runden der Double-Zahl einfügen, außer man benötigt spezielle Rundungsregeln.