Als regelmäßiger Nutzer von Userforms in Excel stehe ich immer wieder vor Herausforderungen beim Umgang mit Dezimalzahlen. Daher möchte ich dieses Thema heute ausführlich behandeln.
Grundlagen: Excel und Systemsteuerung
Excel orientiert sich bei der Formatierung von Dezimalzahlen grundsätzlich an den Einstellungen der Systemsteuerung. Um zu überprüfen, ob diese Einstellungen in der aktuellen Arbeitsmappe verwendet werden, kann man folgenden Befehl einsetzen:
Debug.Print Application.UseSystemSeparators
Wenn dieser Befehl True
zurückgibt, nutzt Excel die Systemeinstellungen. Diese Voreinstellungen bleiben unverändert, selbst wenn man versucht, sie mit folgenden Befehlen anzupassen:
Application.DecimalSeparator = "."
Application.ThousandsSeparator = ","
Anpassung der Dezimal- und Tausendertrennzeichen
Um die Einstellungen in einer Excel-Datei von einem Dezimal-Komma auf einen Dezimal-Punkt zu ändern, empfiehlt sich folgender Code:
Ermittlung der aktuellen Ländereinstellungen
Es ist jedoch wichtig zu wissen, wie die Systemsteuerungs-Einstellungen für Dezimalzahlen eingestellt sind. Dafür gibt es zwei Methoden:
Auslesen der Systemeinstellungen
Achtung: Dies ist nur für versierte Benutzer empfohlen.
Ländereinstellungen auslesen
Hier ist ein Beispielcode, der die notwendigen Informationen aus dem System ausliest:
Mit der Funktion aktuelleSystemeinstellungen()
, die über Makros zugänglich ist, können diese Informationen abgerufen werden.
Quick & Dirty
Zwar technisch nicht ganz so schön, aber wesentlich kürzer ist folgende Lösung
1.000 & 1,00
Dezimalzahlen in User
Nun zum Kernproblem: dem Umgang mit Dezimalzahlen in Userforms. Angenommen, es gibt ein Userform mit einem Textfeld Me.txt_Dezimalzahl
. Die Methode Range("D8").Value = CDbl(Replace(Me.txt_Dezimalzahl.Value, ".", ","))
funktioniert unabhängig von den Einstellungen, wenn die Systemeinstellungen auf Komma gesetzt sind. Dies ist meine bevorzugte Methode.
Die Methode [Range(“D8”).Value = CDbl(Replace(Me.txt_Dezimalzahl.Value, “.”, “,”))] funktioniert ungeachtet der Einstellungen, sofern die Systemeinstellungen auf Komma gesetzt sind, sowohl die Eingabe als Dezimalzahl mit Komma als auch mit Dezimalpunkt. Dies ist die von mir bevorzugte Variante.