Zahlen in Excel VBA formatieren

Einführung

Zahlenformate sind wichtig beim Formatieren von Tabellen. In Excel gibt es mehrere Möglichkeiten, Zahlen in einer Zelle oder in einem Zellbereich zu formatieren.

Möglichkeit 1

Die gewünschte Zelle oder den gewünschten Zellbereich markieren

  1. Auf die Registerkarte „Start“ klicken
  2. In der blau markierten Registergruppe „Zahl“ auf das gewünschte Format klicken. Falls das gewünschte Format nicht angezeigt wird auf den kleinen Pfeil rechts unten klicken. Dann erscheint das in der zweiten Abbildung gezeigt Pop-Up Fenster „Zellen formatieren“.

Im Fenster „Zellen formatieren“ kann man das gewünschte Format auswählen.

Möglichkeit 2

Die gewünschte Zelle oder den gewünschten Zellbereich markieren

  1. Auf die Registerkarte „Start“ klicken
  2. In der blau markierten Registergruppe „Zellen“ auf den kleinen Pfeil rechts neben „Format“ klicken. Dann öffnet sich das in der zweiten Abbildung gezeigt Pop-Up Fenster. Dort uaf den blau markierten untersten Eintrag „Zellen formatieren“ klicken. Dann erscheint wieder das oben gezeigte Pop-Up Fensters „Zellen formatieren“, in dem man das gewünschte Format auswählnen kann.

In der folgenden Tabellen werden die Zahlenformate erklärt:

Zahlen in VBA formatieren

In VBA gibt es zwei Möglichkeiten Zahlen zur formatieren

  1. Zahlen mit der Funktion „Format“ formatieren.
    Die Funktion „Format“ wendet ein bestimmtes Format auf einen Ausdruck an und gibt das Ergebnis als Zeichenfolge zurück. Die Syntax ist
    Format( Expression, [Format], [FirstDayOfWeek] , [FirstWeekOfYear] )
    wobei
    Ausdruck – Erforderlich. Gültiger Ausdruck.
    Format – Optional. Ein gültiger benannter oder benutzerdefinierter Formatausdruck.
    FirstDayOfWeek – Optional. Eine Konstante, die den ersten Tag der Woche angibt.
    FirstWeekOfYear – Optional. Eine Konstante, die die erste Woche des Jahres angibt.

  2. Zahlen mit der Eigenschaft „NumberFormat“ formatieren.
    In VBA können Zahlenformate mit der Anweisung „Range.NumberFormat“ einstellt werden. Die Syntax ist
    Ausdruck.NumberFormat

    Hierbei ist „Ausdruck“ eine Variable, die ein Range-Objekt darstellt.
    Beispiel

Zahlen in VBA mit der Eigenschaft NumberFormat formatieren

Beispiel für die Anwendung der Eigenschaft NumberFormat

Sheets("Tabelle1").Range("A1:A10").NumberFormat = "#,##0.00"

In der folgenden Tabelle sind Beispiel für Zahlenformate für die unterschiedlichen Kategorien gezeigt. Ist in der Spalte Anmerkung „Beispielformat“ eingetragen handelt es sich um ein Beispiel. Das genaue Format hängt von den eigenen Wünschen ab.

Anmerkungen:

  1. Leider ist die Eigenschaft NumberFormat nicht sehr gut dokumentiert. In vielen Fällen ist der Makrorekorder eine gute Hilfe.
  2. Beim Setzen der Eigenschaft NumberFormat lassen sich Text und Zahlenformat kombinieren. Falls eine solche Kombination gewünscht wird, gibt es zwei Möglichkeiten
    – denText in doppelten Anführungszeichen eingefügen.
    den Buchstaben einen umgekehrten Schrägstrich (\) voranstellen.

Beispiel:

Sub Test_Kombination_Text_und_Zahlenformat()
Dim ws As Worksheet
Set ws = Worksheets("Text u Zahl")
ws.Cells(2, 1).NumberFormat = "General"
ws.Cells(3, 1).NumberFormat = """Die Ware kostet ""#.00 €"" bis Ende des Jahres"""
ws.Cells(4, 1).NumberFormat = "General"
ws.Cells(5, 1).NumberFormat = """Buchungsnummer: ""#"
ws.Cells(6, 1).NumberFormat = "\B\u\c\h\u\n\g\s\n\u\m\m\e\r\:\ #"
ws.Cells(7, 1).NumberFormat = "\$#,##0.00 \mill"
Set ws = Nothing
End Sub

Das Ergebnis sieht wie folgt aus:

Standard Zahlenformat setzen

In folgendem Beispiel Code wird gezeigt, wie sich das Standard Zahlenformat setzen lässt:

Sub Test_NumberFormat_Standard()
Dim ws As Worksheet
Set ws = Worksheets("Standard")
'
ws.Cells(2, 1).NumberFormat = "General"
ws.Cells(3, 1).NumberFormat = "General"
ws.Cells(4, 1).NumberFormat = "General"
ws.Cells(5, 1).NumberFormat = "General"
'
Set ws = Nothing
End Sub

Das Ergebnis sieht wie folgt aus

Format Zahl setzen

In folgendem Beispiel Code wird gezeigt, wie sich das Format Zahl setzen lässt:

Sub Test_NumberFormat_Zahl_1()
Dim ws As Worksheet
Set ws = Worksheets("Zahl")
'
' #: nur die signifikanten Ziffern in einer Zahl werden angezeigt
' 0: auch die nicht signifikante Nullen in einer Zahl werden angezeigt,
'    die über weniger Stellen als im Formatcode angegeben verfügt.
ws.Cells(2, 1).NumberFormat = "0"
ws.Cells(3, 1).NumberFormat = "0.00"
ws.Cells(4, 1).NumberFormat = "0.##"
ws.Cells(5, 1).NumberFormat = "0.0000"
ws.Cells(6, 1).NumberFormat = "#,##0.0000"
ws.Cells(7, 1).NumberFormat = "#,##0.00"" Gesamtumsatz"""
ws.Cells(8, 1).NumberFormat = "#,##0.00??"
ws.Cells(9, 1).NumberFormat = "\$#,##0.00 \mill"
'
Set ws = Nothing
End Sub

Das Ergebnis sieht wie folgt aus

Wichtig:
Bei der deutsche Excel Version gibt es eine Besonderheit bei der Formatierung. In Excel Tabellenblättern wird ein Komma als Dezimaltrennzeichen verwendet. In VBA muss dagegen ein Punkt als Dezimaltrennzeichen verwendet werden.

Format Währung setzen

in folgendem Beispiel Code wird gezeigt, wie sich das Format Währung setzen lässt. In der deutschen Excel Version gibt es hierbei eine Besonderheit. In Zeile 6 und 7 befindet sich das Dollarzeichen „$“ im Formatcode. In der deutschen Excel Version wird in der Excel-Zelle wird jedoch das Eurozeichen „€“ angezeigt. Möchte man explizit das Dollarzeichen erhalten muss man folgenden Formatcode verwenden
  ws.Range(Cells(2, 4), Cells(6, 4)).NumberFormat = „[$$-en-US]#,##0.00;[Red][$$-en-US]#,##0.00“

Sub Test_NumberFormat_Waehrung_1()
Dim ws As Worksheet
Set ws = Worksheets("Währung")
'
' Positive Zahl
' Währungssymbol vor der Zahl
' <POSITIVE>;<NEGATIVE>;<ZERO>;<TEXT>
ws.Cells(2, 1).NumberFormat = "General"
ws.Cells(3, 1).NumberFormat = "$#,##0.00;[Red]$#,##0.00"
ws.Cells(4, 1).NumberFormat = "$ #,##0.00;[Red]$ #,##0.00"
' Währungssymbol hinter der Zahl
ws.Cells(5, 1).NumberFormat = "#,##0.00 $;[Red]#,##0.00 $"
' Dollarzeichen vor der Zahl
ws.Cells(6, 1).NumberFormat = "[$$-en-US] #,##0.00;[Red][$$-en-US] #,##0.00"
' Eurozeichen vor der Zahl
ws.Cells(7, 1).NumberFormat = "[$€-x-euro2] #,##0.00;[Red][$€-x-euro2] #,##0.00"
' Britisches Pfund Zeichen vor der Zahl
ws.Cells(8, 1).NumberFormat = "[$£-en-GB] #,##0.00;[Red][$£-en-GB] #,##0.00"
'
' Negative Zahl
ws.Cells(9, 1).NumberFormat = "General"
ws.Cells(10, 1).NumberFormat = "$#,##0.00;[Red]$#,##0.00"
ws.Cells(11, 1).NumberFormat = "$ #,##0.00;[Red]$ #,##0.00"
' Währungssymbol hinter der Zahl
ws.Cells(12, 1).NumberFormat = "#,##0.00 $;[Red]#,##0.00 $"
' Dollarzeichen vor der Zahl
ws.Cells(13, 1).NumberFormat = "[$$-en-US] #,##0.00;[Red][$$-en-US] #,##0.00"
' Eurozeichen vor der Zahl
ws.Cells(14, 1).NumberFormat = "[$€-x-euro2] #,##0.00;[Red][$€-x-euro2] #,##0.00"
' Britisches Pfund Zeichen vor der Zahl
ws.Cells(15, 1).NumberFormat = "[$£-en-GB] #,##0.00;[Red][$£-en-GB] #,##0.00"
'
' Wert 10.000
ws.Cells(16, 1).NumberFormat = "General"
ws.Cells(17, 1).NumberFormat = "$#,##0.00;[Red]$#,##0.00"
ws.Cells(18, 1).NumberFormat = "$ #,##0.00;[Red]$ #,##0.00"
' Währungssymbol hinter der Zahl
ws.Cells(19, 1).NumberFormat = "#,##0.00 $;[Red]#,##0.00 $"
' Dollarzeichen vor der Zahl
ws.Cells(20, 1).NumberFormat = "[$$-en-US] #,##0.00;[Red][$$-en-US] #,##0.00"
' Eurozeichen vor der Zahl
ws.Cells(21, 1).NumberFormat = "[$€-x-euro2] #,##0.00;[Red][$€-x-euro2] #,##0.00"
' Britisches Pfund Zeichen vor der Zahl
ws.Cells(22, 1).NumberFormat = "[$£-en-GB] #,##0.00;[Red][$£-en-GB] #,##0.00"
'
Set ws = Nothing
End Sub

Das Ergebnis sieht wie folgt aus

Auch hier ist zu sehen, dass bei der deutsche Excel Version in Excel Tabellenblättern ein Komma als Dezimaltrennzeichen verwendet wird. In VBA muss dagegen ein Punkt als Dezimaltrennzeichen verwendet werden.

Format Buchaltung setzen

In folgendem Beispiel Code wird gezeigt, wie sich das Format Buchhaltung setzen lässt:

 

Sub Test_NumberFormat_Buchhaltung_1()
Dim ws As Worksheet
Set ws = Worksheets("Buchhaltung")
'
' <POSITIVE>;<NEGATIVE>;<ZERO>;<TEXT>
ws.Cells(2, 1).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
ws.Cells(3, 1).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
ws.Cells(4, 1).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
'
Set ws = Nothing
End Sub

Das Ergebnis sieht wie folgt aus

Format Datum setzen

In folgendem Beispiel Code wird gezeigt, wie sich das Format Datum setzen lässt:

 

Sub Test_NumberFormat_Datum_1()
Dim ws As Worksheet
Set ws = Worksheets("Datum")
'
ws.Cells(2, 1).NumberFormat = "[$-x-sysdate]dddd, mmmm dd, yyyy" ' Freitag, 11. November 2022
ws.Cells(3, 1).NumberFormat = "[$-de-DE]d/ mmmm yyyy;@"         ' 11. November 2022
ws.Cells(4, 1).NumberFormat = "mm/dd/yyyy"
ws.Cells(5, 1).NumberFormat = "dddd, mmmm dd, yyyy"
ws.Cells(6, 1).NumberFormat = "yyyy-mm-dd;@"
ws.Cells(7, 1).NumberFormat = "mm\/dd\/yyyy"
ws.Cells(8, 1).NumberFormat = "[$-409]mmmm yy"
ws.Cells(9, 1).NumberFormat = "[$-409]mmm yy"
ws.Cells(10, 1).NumberFormat = "[$-409]dddd, mmmm dd, yyyy"
'
Set ws = Nothing
End Sub

Das Ergebnis sieht wie folgt aus

Format Uhrzeit setzen

In folgendem Beispiel Code wird gezeigt, wie sich das Format Uhrzeit setzen lässt:

 

Sub Test_NumberFormat_Uhrzeit_1()
Dim ws As Worksheet
Set ws = Worksheets("Uhrzeit")
'
ws.Cells(2, 1).NumberFormat = "[$-en-US]h:mm AM/PM;@"
ws.Cells(3, 1).NumberFormat = "[$-x-systime]h:mm:ss AM/PM"
ws.Cells(4, 1).NumberFormat = "h:mm;@"
ws.Cells(5, 1).NumberFormat = "h:mm;@"
ws.Cells(6, 1).NumberFormat = "hh:mm;@"
'
Set ws = Nothing
End Sub

Das Ergebnis sieht wie folgt aus

Format Prozent setzen

In folgendem Beispiel Code wird gezeigt, wie sich das Format Prozent setzen lässt:

 

Sub Test_NumberFormat_Prozent()
Dim ws As Worksheet
'
Set ws = Worksheets("Prozent")
ws.Cells(2, 1).NumberFormat = "General"
ws.Cells(3, 1).NumberFormat = "0%"
ws.Cells(4, 1).NumberFormat = "0.0%"
ws.Cells(5, 1).NumberFormat = "0.00%"
'
Set ws = Nothing
End Sub

Das Ergebnis sieht wie folgt aus

Format Bruch setzen

In folgendem Beispiel Code wird gezeigt, wie sich das Format Bruch setzen lässt:

 

Sub Test_NumberFormat_Bruch()
Dim ws As Worksheet
'
Set ws = Worksheets("Bruch")
ws.Cells(2, 1).NumberFormat = "General"
ws.Cells(3, 1).NumberFormat = "# ???/???"
ws.Cells(4, 1).NumberFormat = "General"
ws.Cells(5, 1).NumberFormat = "# ?/10"
ws.Cells(6, 1).NumberFormat = "General"
ws.Cells(7, 1).NumberFormat = "# ?/?"
'
Set ws = Nothing
End Sub

Das Ergebnis sieht wie folgt aus

Achtung:
Man muss sich bei der Formatierung genau überlegen, wieviel Ziffern Zähler und Nenner haben müssen. Ansonsten erhält man nicht das gewünschte Ergebnis.

Format Wissenschaft setzen

In folgendem Beispiel Code wird gezeigt, wie sich das Format Wissenschaft setzen lässt:

 

Sub Test_NumberFormat_Wissenschaftlich_1()
Dim ws As Worksheet
Set ws = Worksheets("Wissenschaftlich")
'
ws.Cells(2, 1).NumberFormat = "General"
ws.Cells(3, 1).NumberFormat = "##0.0E+0"
ws.Cells(4, 1).NumberFormat = "0.00E+00"

'
Set ws = Nothing
End Sub

Das Ergebnis sieht wie folgt aus

Zu beachten ist, dass in der deutschen Excel Version im Tabellenblatt ein Komma als Dezimaltrennzeichen verwendet wird während in VBA ein Punkt als Dezimaltrennzeichen verwendet werden muss.

Format Text setzen

In folgendem Beispiel Code wird gezeigt, wie sich das Format Text setzen lässt:

 

Sub Test_NumberFormat_Text()
Dim ws As Worksheet
'
Set ws = Worksheets("Text")
ws.Cells(2, 1).NumberFormat = "General"
ws.Cells(3, 1).NumberFormat = "@"
ws.Cells(4, 1).NumberFormat = "General"
ws.Cells(5, 1).NumberFormat = "@"
ws.Cells(6, 1).NumberFormat = "General"
ws.Cells(7, 1).NumberFormat = "@"
'
Set ws = Nothing
End Sub

Das Ergebnis sieht wie folgt aus

Wichtige Anwendung:
Wenn man mit VBA Text in eine Zelle schreibt, kann es vorkommen, dass Excel den Text automatisch in ein anderes Format umwandelt.
Beispiele:

  • Schreibt man den Text „5-1“ in eine Zelle wird der Text automatisch in das Datum „01. Mai“ umgewandelt
  • Schreibt man die Hex Zahl 3E8 (Dezimal 1000) als Text in eine Zelle wird der Text automatisch in das Format Wisssenschaft umgewandelt: 3,00E+08. 
Die automatische Umwandlung von Text lässt sich verhindern, wenn man das Format der Zelle als Text setzt, bevor man den Text in die Zelle schreibt. Eine Alternative besteht darin, dass man den Text um ein führendes einfaches Anführungszeichen ergänzt.

Format Benutzerdefiniert setzen

In folgendem Beispiel Code wird gezeigt, wie sich das Format Benutzerdefiniert setzen lässt:

 

Sub Test_NumberFormat_Benutzerdefiniert()
Dim ws As Worksheet
'
Set ws = Worksheets("Benutzerdefiniert")
'
' <POSITIVE>;<NEGATIVE>;<ZERO>;<TEXT>
ws.Cells(2, 1).NumberFormat = "[Green]#.00;[Red]#.00;[Blue]0.00;[Cyan]""Product: ""@"
ws.Cells(3, 1).NumberFormat = "[Green]#.00;[Red]#.00;[Blue]0.00;[Cyan]""Product: ""@"
ws.Cells(4, 1).NumberFormat = "[Green]#.00;[Red]#.00;[Blue]0.00;[Cyan]""Product: ""@"
ws.Cells(5, 1).NumberFormat = "[Green]#.00;[Red]#.00;[Blue]0.00;[Cyan]""Product: ""@"
Set ws = Nothing
End Sub

Das Ergebnis sieht wie folgt aus:

Zahlen in VBA mit der Funktion „Format“ formatieren

 

Die VBA-Funktion „Format“ wendet ein bestimmtes Format auf einen Ausdruck an und gibt das Ergebnis als Zeichenfolge zurück. Die Anwendungsmöglichkeiten sind

  • Zahlen, die ins Direktfenster geschrieben werden, formatieren.
  • Zahlen, die in eine Excel Tabellenblattzelle geschrieben werden, formatieren (in bestimmten Fällen ändert Excel allerdings das Format automatisch).
  • Zahlen, die in eine Message Box geschrieben werden, formatieren.
  • Zahlen, die in die Statusleiste geschrieben werden, formatieren.
  • Zahlen, die in eine Datei geschrieben werden, formatieren.

Beispiele werden in folgendem VBA-Code gezeigt

Sub text_format_3()
Dim ws As Worksheet, i As Integer
Set ws = Worksheets("Tabelle1")
'
' Zahlen, die ins Direktfenster geschrieben werden, formatieren
Debug.Print Format(7061.56489, "#.##")
'
' Zahlen, die in eine Tabellenblattzelle geschrieben werden, formatieren
ws.Cells(1, 1).Value = Format(7061.56489, "#.##")
'
' Zahlen, die in eine Message Box geschrieben werden, formatieren
MsgBox Format(7061.56489, "#.##")
'
' Zahlen, die in die Statusleiste geschrieben werden, formatieren
For i = 1 To 100
    Application.StatusBar = "Datensatz " & Format(i, "000")
    Application.Wait Now + TimeSerial(0, 0, 0.8)
Next i
'
Set ws = Nothing
End Sub

Zahlen mit vordefinierten Formaten formatieren

Sub Format_Beispiel_1()
Debug.Print Format(1234567.8) 'Das Ergebnis ist: 1234567,8
' Verwendet die Systemeinstellungen für den Dezimalteil

Debug.Print Format(1234567.8, "Currency") 'Das Ergebnis ist: 1.234.567,80 €
'Verwendet die Währungseinstellungen des Systems

Debug.Print Format(1234567.8, "Fixed") 'Das Ergebnis ist: 1234567,80
'Mindestens eine Stelle vor dem Dezimalpunkt und verwendet
'die Systemeinstellungen für den Dezimalteil

Debug.Print Format(1234567.8, "Standard") 'Das Ergebnis ist: 1.234.567,80
' Verwendet die Systemeinstellungen für Tausendertrennzeichenden und Dezimalteil

Debug.Print Format(0.8, "Percent") 'Das Ergebnis ist: 123456780,00%
'Multipliziert mit 100 und fügt % hinzu und verwendet die Systemeinstellungen für den Dezimalteil

Debug.Print Format(1234567.8, "Scientific") 'Das Ergebnis ist: 1,23E+06
'Wissenschaftliche Notation und verwendet die Systemeinstellungen für den Dezimalteil

Debug.Print Format(1234567.8, "Yes/No") 'Das Ergebnis ist: Ja
Debug.Print Format(0, "Yes/No")         'Das Ergebnis ist: Nein
'Nein, wenn die Zahl Null ist

Debug.Print Format(1234567.8, "True/False") 'Das Ergebnis ist: Wahr
Debug.Print Format(0, "True/False")         'Das Ergebnis ist: Falsch
'Falsch, wenn die Zahl gleich Null ist

Debug.Print Format(1234567.8, "On/Off") 'Das Ergebnis ist: Ein
Debug.Print Format(0, "On/Off") 'Das Ergebnis ist: Aus
'Aus, wenn die Zahl gleich Null ist

End Sub

Zahlen mit benutzerdefinierten Formaten formatieren

Mit der Funktion Format kann eine Zahl in eine Zeichenfolge in einem benutzerdefinierten Format formatiert werden.

  • 0 ist ein Ziffernplatzhalter, der eine Ziffer oder Null anzeigt.
  • # ist ein Ziffernplatzhalter, der eine Ziffer oder nichts anzeigt.
  • Ein Punkt (.) ist der Dezimalplatzhalter.
  • % ist der Prozentplatzhalter und das Komm.
  • das Komma (,) ist das Tausendertrennzeichen.
  • Text kann mit doppelten Anführungszeichen hinzugefügt werden.
  • Ein einzelnes Zeichen kann hinzugefügt werden, wenn es nach einem umgekehrten Schrägstrich (\) verwendet wird.
Sub Format_Beispiel_2()
Debug.Print Format(7.8, "000.00")                    ' Das Ergebnis ist: 007.80
Debug.Print Format(12347.8356, "000.00")             ' Das Ergebnis ist: 12347.84
Debug.Print Format(7.8, "###.##")                    ' Das Ergebnis ist: 7.8
Debug.Print Format(12347.8356, "###.##")             ' Das Ergebnis ist: 12347.84
Debug.Print Format(7.8, "\$.00")                     ' Das Ergebnis ist: $7.80
Debug.Print Format(1237.835, "ABA0.00")              ' Das Ergebnis ist: ABA1237.84
Debug.Print Format(1237.835, """Betrag: ""0.00 \€")  ' Das Ergebnis ist: Betrag: 1237,84 €
Debug.Print Format(0.505, "###.##%")                 ' Das Ergebnis ist: 50,5%
Debug.Print Format(12347.8356, "%000.00")            ' Das Ergebnis ist: %12347.84
End Sub

Zahlen in Abhängigkeit von den Werten formatieren

Die Funktion Format kann verschiedene Abschnitte haben, die unterschiedliche Formatregeln für positive Zahlen, negative Zahlen, Null und ohne Wert verwenden. Diese Abschnitte werden durch ein Semikolon getrennt.

Sub Format_Beispiel_3()
Debug.Print Format(5.7, "000.00;(000.00);""Null"";""Leer""")       ' Das Ergebnis ist: 005.70
Debug.Print Format(-5.7, "000.00;(000.00);""Null"";""Leer""")      ' Das Ergebnis ist: (005.70)
Debug.Print Format(0, "000.00;(000.00);""Null"";""Leer""")         ' Das Ergebnis ist: Null
Debug.Print Format(Null, "000.00;(000.00);""Null"";""Leer""")      ' Das Ergebnis ist: Leer
End Sub

Datum mit vordefinierten Formaten formatieren

Sub Test_Format_Datum()
Dim Datum As Date
Datum = #5/20/2020 9:45:56 PM#

Debug.Print Format(Datum, "General Date")   'Das Ergebnis ist: 20.05.2020 21:45:56
Debug.Print
Debug.Print Format(Datum, "Long Date")      'Das Ergebnis ist: Mittwoch, 20. Mai 2020
Debug.Print Format(Datum, "Medium Date")    'Das Ergebnis ist: 20. Mai. 20
Debug.Print Format(Datum, "Short Date")     'Das Ergebnis ist: 20.05.2020
Debug.Print
Debug.Print Format(Datum, "Long Time")      'Das Ergebnis ist: 21:45:56
Debug.Print Format(Datum, "Medium Time")    'Das Ergebnis ist: 09:45
Debug.Print Format(Datum, "Short Time")     'Das Ergebnis ist: 21:45
End Sub

Datumsangaben mit benutzerdefinierten Formaten formatieren

Die Funktion Format kann Datumsangaben mit benutzerdefinierten Formaten formatieren. Zeichen wie d (für Tag), m (für Monat), y (für Jahr), w (für Woche), q (für Quartal) können verwendet werden, um benutzerdefinierte Datumsformate zu erstellen.

Sub Format_Beipsiel_5()
Dim Datum As Date
Datum = #5/20/2020 9:45:56 PM#

Debug.Print Format(Datum, "d/m/yy")           ' Das Ergebnis ist: 20.5.20
Debug.Print Format(Datum, "dd.mm.yy")         ' Das Ergebnis ist: 20.05.20
Debug.Print Format(Datum, "dd. mmm yy")       ' Das Ergebnis ist: 20. Mai 20
Debug.Print Format(Datum, "dd. mmmm yyyy")    ' Das Ergebnis ist: 20. Mai 2020
Debug.Print Format(Datum, "ddd dd. mm. yy")    ' Das Ergebnis ist: Mi 20. 05. 20
Debug.Print Format(Datum, "dddd dd. mm. yyyy") ' Das Ergebnis ist: Mittwoch 20. 05. 2020
Debug.Print Format(Datum, "y")  ' Das Ergebnis ist: 141, Nummer des Tages im Jahr (1-366)
Debug.Print Format(Datum, "ww") ' Das Ergebnis ist: 21, Nummber der Woche im Jahr (1-52)
Debug.Print Format(Datum, "q")  ' Das Ergebnis ist: 2, Quartal im Jahr (1-4)

End Sub

Zeichen wie h (für Stunden), n (für Minuten), s (für Sekunden) und am, pm-Kombinationen können verwendet werden, um benutzerdefinierte Zeitformate zu erstellen.

Sub Format_Beispiel_6()
Dim Datum As Date
Datum = #5/20/2020 9:45:56 PM#

Debug.Print Format(Datum, "h:n:s")      ' Das Ergebnis ist: 21:45:56
Debug.Print Format(Datum, "hh:nn:ss")   ' Das Ergebnis ist: 21:45:56

Debug.Print Format(Datum, "hh:nn:ss am/pm")    ' Das Ergebnis ist: 09:45:56 pm
Debug.Print Format(Datum, "hh:nn:ss AM/PM")    ' Das Ergebnis ist: 09:45:56 PM
Debug.Print Format(Datum, "hh:nn:ss a/p")      ' Das Ergebnis ist: 09:45:56 p
Debug.Print Format(Datum, "hh:nn:ss A/P")      ' Das Ergebnis ist: 09:45:56 P
End Sub

Für bessere Lesbarkeit formatieren

Die Funktion Format verwenden um Zeichenfolgen oder Zahlen zur besseren Lesbarkeit formatieren.

  • @ ist ein Zeichenplatzhalter, der verwendet wird, um ein Zeichen oder Leerzeichen anzuzeigen.
  • & ist ein Zeichenplatzhalter, der verwendet wird, um ein Zeichen oder nichts anzuzeigen.
  • ! kann verwendet werden, um Zeichenplatzhalter von links nach rechts zu verwenden
  • < oder > kann verwendet werden, um Klein- oder Großschreibung zu erzwingen.

Dies kann beim Formatieren von IBAN Nummern, Telefonnummern oder anderen großen Zahlen nützlich sein. Der Usprüngliche Wert wird nicht verändert.

Sub Format_Beispiel_7()
Dim strIBAN As String, strTelefonnummer As String
strIBAN = "DEXXXXXXXXXXXXXXXXXXXX"
Debug.Print Format(strIBAN, "@@@@ @@@@ @@@@ @@@@ @@@@ @@")  ' Das Ergebnis ist: DEXX XXXX XXXX XXXX XXXX XX
Debug.Print Format(strIBAN, "&&&& &&&& &&&& &&&& &&&& &&")  ' Das Ergebnis ist: DEXX XXXX XXXX XXXX XXXX XX
strTelefonnummer = "4917012341234"
Debug.Print Format(strTelefonnummer, "+@@ @@@ / @@@@ @@@@")  ' Das Ergebnis ist: +49 170 / 1234 1234
Debug.Print Format(strTelefonnummer, "+&& &&& / &&&& &&&&")  ' Das Ergebnis ist: +49 170 / 1234 1234
End Sub

Dieser Beitrag hat 4 Kommentare

  1. Alois

    Hallo
    Hätte da noch eine Frage zur Funktion = Format (Bereich „Formatcode“) da heißt es doch das man Text den man zusätzlich zum Format eingeben möchte jedem Zeichen einen Backslash veranstalten muß habe nun zufällig einmal Text ohne doppelt Anführungszeichen oder Backslasch eingegeben im Formatierungscode und der zeigt mir alles außer den reservierten Zeichen (d m y h n s usw) an.
    Könntest du vielleicht auch mal das =Format Thema behandeln (oder nicht NumberFormat =)
    Habe da schon sehr viele Seiten dazu gesehen aber die sind sich ja alle nicht einig jeder schreibt was anders.
    DANKE

    Gruß Alois

    1. admin

      Hallo Alois,
      vielen Dank für Deinen Kommentar. Ich werde den Beitrag um das Thema der „Format“ Funktion ergänzen. Das wird aber leider ein bisschen dauern. Ich bitte um etwas Geduld. Auch bei „NumberFormat“ gibt es wird bei der Funktion „Format“ widersprüchliche Angaben im Internet.
      Die Funktion „Format“ gibt einen Wert vom Typ Variant (String) zurück. Daher ist es möglich Text mit dem Formatstring zu verketten, z. B.
      Debug.Print „Betrag: “ & Format(1234567.89, „#,##0.00″) & “ $“
      Dasselbe Ergebnis erhält man mit
      Debug.Print Format(1234567.89, „\B\e\t\r\a\g\:\ #,##0.00 \$“)
      Debug.Print Format(1234567.89, „““Betrag: „“#,##0.00 \$“)
      Man kann übrigens den Formatstring auch als Text in eine Zelle schreiben (das führende einfache Anführungszeichen zwingt Excel den Zellinhalt als Text zu behandeln)
      cells(1,1).value = „‚Betrag: “ & Format(1234567.89, „#,##0.00″) & “ $“
      Viele Grüße
      Stefan

  2. Alois

    Hallo Stefan
    Wir kommen uns schon sehr nahe probier mal wie du geschrieben hast Format (1234567,89, „Bertag#,##0.00)
    Ohne die Backslash vor jedem Buchstaben bei mir wird das in der Ausgabe in Excel angezeigt nur reservierte Zeichen wie z.B. h m s n y @ # ? usw. brauchen bei mir einen Slash.
    Gruß und schönen Sonntag
    Alois

    1. admin

      Hallo Alois,
      der Ausdruck Debug.Print Format(1234567.89, „Bertag#,##0.00“) liefert bei mir das gewünschte Ergebnis. Deine Beobachtung wundert mich nicht. Die Buchstaben h, m, s sind, wie Du geschrieben hast, reservierte Zeichen werden für die Formatierung einer Uhrzeit verwendet. Möchte man die Buchstaben darstellen, muss man den Backslash \ als „Escape“ Zeichen verwenden. In VBA möchte man bei der Anwendung der Format Funktion einen Weg wählen, der immer funktioniert und nicht nur manchmal. Daher empfiehlt es sich den Text entweder in doppelte Anführungszeichen einzuschließen oder jeden Buchstaben mit einem Backslash zu versehen.
      Viele Grüße
      Stefan

Schreibe einen Kommentar