VBA Zelle als Währung formatieren

VBA ist inzwischen innerhalb meines Büroalltag ein angenehmer Helfer geworden, um viele Dinge in der Microsoft Office Welt zu automatisieren. Dabei kommt es manchmal vor, dass man in Excel eine Zelle mittels VBA als Währung formatieren möchte.

In einem anderen Beitrag hatte ich bereits gezeigt, wie man eine Excel-Zelle mit VBA als Datum formatieren kann. Nun soll es um Währungen gehen, wobei diese Vorgehensweise auch allgemein anwendbar ist für andere Formatierungen.

In dem gezeigten Beispiel nehmen wir einfach eine Excel-Zelle in welcher eine Zahl eingetragen ist. Wie man sieht, weist diese Zelle keinerlei Formatierungen auf bzw. ist als „Standard“ formatiert.

Screenshot Excel als Standard-Formatierte Zelle soll per VBA in Euro formatiert werden
normal formatierte Zelle

Es gibt nun zwei Herangehensweise, wie man die Währungsformatierung im VBA vornehmen kann. Dies ist etwas abhängig davon, wie der Rest des VBA-Programms aussieht und was man damit vor hat.

Datentyp Currency verwenden

Nehmen wir an der in die Zelle einzutragende Wert liegt im VBA-Makro vor. In diesem Fall können wir ganz einfach einen Datentyp Currency definieren und diesem den Wert zuweisen. Anschließend übergibt man den Currency-Wert an die betreffende Zelle.

Sub FormatAsCurrency_1()
    Dim myCur As Currency
    myCur = 1.5678
    Cells(2, 2).Value = myCur
End Sub

Excel erkennt nun automatisch den Datentyp und nimmt die richtige Formatierung vor. Dabei berücksichtigt Excel die länderspezifischen Einstellungen automatisch. Wenn dein Office/Windows also auf „Deutschland“ eingestellt, dann formatiert Excel dies automatisch auf z.B. 1,57 €.

Screenshot: mit VBA Währungsformat festgelegt
Ergebnis: als Euro formatierte Excel-Zelle

Eigenschaft NumberFormat verwenden

Ein anderer Fall kann vorliegen, wenn zum Beispiel die Werte in der Excel-Tabelle bereits vorhanden sind. Es also keinen Sinn macht den Datentyp Currency einzuführen. Dann kann man der jeweiligen Zelle auch direkt das Datenformat zuweisen. Dazu verwendet man die Eigenschaft NumberFormat.

Zelle als Euro (€) formatieren

Für unser Beispiel sieht das dann wie folgt aus. Der Eigenschaft  NumberFormat weist man einen Formatierungs-String zu.

Sub FormatAsCurrency_2()
    Cells(2, 2).NumberFormat = "#,##0.00 €"
End Sub

In diesem Beispiel wird die betreffende Zelle dann als EUR im Format 1,57 € formatiert. Beim Formatierungs-String darf man sich nicht verwirren lassen durch die Lokalisierungen. Im VBA-Code muss man die originäre Formatierung verwenden. Dass heißt als Tausender-Separator das Komma und als Dezimal-Separator den Punkt. Ruft man die Formatierung direkt im Excel auf, dann wird es ggf. genau umgekehrt angezeigt, weil Excel bereits die länderspezifischen Einstellungen berücksichtigt.

Zelle als Dollar ($) formatieren

Möchte man die Zelle in einer komplett anderen Währung formatieren, zum Beispiel als Dollar im Format $1.57 dann würde der Makro-Code so aussehen:

Sub FormatAsCurrency_2()
    Cells(2, 2).NumberFormat = "$#,##0.00"
End Sub

Funktion FormatCurrency verwenden

Im VBA gibt es auch eine eigene Funktion namens FormatCurrency, welche bei der Formatierung eines Wertes in ein Währungsformat unterstützt. Ggf. nachteilig an dieser Funktion ist, dass diese einen String zurückgibt und somit der Wert in der Excel-Tabelle als Text bzw. Zeichenkette formatiert wird. Damit eignet es sich nicht für weitere Berechnungen im Excel.

In diesem Beispiel wird ein Wert vom Datentyp Double als Währung formatiert und der Zelle zugewiesen.

Sub FormatAsCurrency_3()
    Dim myVal As Double
    myVal = 1.5678
    Cells(2, 2) = FormatCurrency(myVal, 2)
End Sub

Die Funktion FormatCurrency bietet hier mehrere Parameter für die Formatierung:

FormatCurrency(Expression, [ NumDigitsAfterDecimal, [ IncludeLeadingDigit, [ UseParensForNegativeNumbers, [ GroupDigits ]]]])

Expression: Das ist der Zahlenwert der in eine Währung umgewandelt werden soll.

NumDigitsAfterDecimal: Die ist ein optionaler Parameter. Hier kann man angeben, wie viele Dezimalstellen nach dem Komma angezeigt werden sollen.

Bestseller Nr. 1
Bestseller Nr. 2

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht.