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.

Links