John hat ein Arbeitsblatt zur Dateneingabe, in das Benutzer Informationen eingeben können.

Er möchte, dass eine Zelle automatisch so formatiert wird, dass genau die Anzahl der Dezimalstellen angezeigt wird, die ein Benutzer eingibt. Wenn der Benutzer beispielsweise „12.345“ eingibt, möchte er, dass die Zelle automatisch so formatiert wird, dass 3 Dezimalstellen angezeigt werden. John weiß, dass er das allgemeine Format für eine Zelle verwenden kann (was gut funktioniert), aber dieser Ansatz funktioniert nicht, wenn der Benutzer einen Wert eingibt, der mit 0 endet, z. B. „12.34500“, den er (automatisch) formatieren möchte. um 5 Dezimalstellen anzuzeigen.

Wenn Sie der Meinung sind, dass Sie ein benutzerdefiniertes Format verwenden könnten, um den Bedarf zu decken, funktioniert dies nicht. Mit jedem benutzerdefinierten Format, das wir uns einfallen lassen könnten, entfernt Excel alle nachgestellten Nullen von dem, was angezeigt wird. (Wenn das benutzerdefinierte Format „0“ als Platzhalter enthält, werden am Ende des Eintrags Nullen hinzugefügt.)

Der einfachste Weg, dies ganz ehrlich zu handhaben, besteht darin, die Zellen einfach als Text zu formatieren, bevor Sie mit der Eingabe von Informationen beginnen. Auf diese Weise akzeptiert Excel einfach, was eingegeben wurde – einschließlich nachfolgender Nullen – und fügt es in die Zelle ein. Sie können den Inhalt der Zellen außerdem nach rechts ausrichten, sodass sie zumindest ein bisschen mehr wie numerische Werte aussehen.

Der Nachteil dabei ist, dass Sie bei der Verwendung der Werte in Formeln vorsichtig sein müssen. Am sichersten ist es, einfach einen Verweis auf die Zelle innerhalb der VALUE-Funktion folgendermaßen zu umgeben:

=VALUE(A1) * 1.375

Ein anderer Ansatz besteht darin, ein Makro zu erstellen, das überprüft, was in einen Zellbereich eingegeben wird. Formatieren Sie zunächst die Zellen als Text und erstellen Sie dann aus diesen Zellen einen benannten Bereich (DataEntry). Anschließend können Sie dem Codeblatt für das verwendete Arbeitsblatt den folgenden Code hinzufügen:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range     Dim sEntry As String     Dim dEntryNumber As Double     Dim arr

If Not Intersect(Target, Range("DataEntry")) Is Nothing Then         Application.EnableEvents = False         For Each c In Target.Cells             If IsEmpty(c) Then                 c.NumberFormat = "@"    ' Reset to Text format             Else                 If IsNumeric(c) Then                     If Len(c.Value) = 0 Then                         c.NumberFormat = "@"    ' Reset to Text format                     Else                         sEntry = c.Value                         dEntryNumber = CDbl(sEntry)



arr = Split(sEntry, ".")

If UBound(arr) = 1 Then                             ' Change NumberFormat in accordance with                             ' the number of digits after the decimal point                             c.NumberFormat = "0." & String(Len(arr(1)), "0")

c.Value = dEntryNumber                         End If                     End If                 End If             End If         Next c         Application.EnableEvents = True     End If End Sub

Das Makro wird jedes Mal ausgelöst, wenn sich etwas im Arbeitsblatt ändert. Anschließend wird überprüft, ob diese Änderung in einer der Zellen im DataEntry-Bereich aufgetreten ist. Wenn ja, wird untersucht, was in die Zelle eingegeben wird (was Excel als Text behandelt, da die Zelle so formatiert wurde)

und bestimmt, ob es sich um eine Zahl handelt und wie viele Stellen rechts von der Dezimalstelle stehen. Anschließend wird die Zelle so formatiert, dass so viele Dezimalstellen angezeigt werden, und der numerische Wert wird wieder in die Zelle eingefügt.

Die einzige Bedingung, unter der dieser Ansatz nicht funktioniert, besteht darin, dass Sie einen Wert in eine Zelle im DataEntry-Bereich einfügen (der die Zelle in ein numerisches Format konvertiert) und dann in derselben Zelle einen anderen numerischen Wert eingeben. Das Makro kann in diesem Fall nicht wissen, ob nachgestellte Nullen eingegeben werden. (Denken Sie daran, dass nachfolgende Nullen nur beibehalten werden, wenn die Zelle als Text formatiert ist. Da dies nicht der Fall ist, entfernt Excel die nachfolgenden Nullen und das Makro arbeitet mit diesem Wert, als wäre er eingegeben worden.)

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (1963) gilt für Microsoft Excel 2007, 2010, 2013 und 2016.