Benutzerdefinierte numerische Formate in VBA
Zahlenformatierung in VBA
VBA stellt nichtnegativen Zahlen bei der Ausgabe ein Leerzeichen voran und negativen Zahlen ein Minuszeichen.
Direktbereich
? 2 : ? 0 : ? -2
2
0
-2
Außerdem folgt Zahlen ein Leerzeichen, daher befinden sich in der folgenden Ausgabe zwei Leerzeichen zwischen den beiden Zweien.
Direktbereich
? 2; : ? 2 : ? 1234
2 2
1234
Die ausdrückliche Wandlung einer Zahl in einen Text mit der Standardfunktion "Str$" verhält sich genau so, abgesehen davon, daß sie der Zahl kein Leerzeichen nachstellt.
Direktbereich
? Str$( 2 ); : ? Str$( 2 ) : ? Str$( -2 )
2 2
-2
Die ausdrückliche Wandlung einer Zahl in einen Text mit der Standardfunktion "Format" stellt positiven Zahlen ein Leerzeichen weder voran noch nach.
Direktbereich
? VBA.Strings.Format$( 2 ); : ? VBA.Strings.Format$( 2 ) : ? VBA.Strings.Format$( -2 )
22
-2
Außerdem beachtet die Funktion "Format", wie auch die direkte Zahlenausgabe, das Gebietsschema. So werden beispielsweise Kommas als Dezimaltrennzeichen verwendet, wenn das in der Umgebung so konfiguriert wurde. Nur die klassische BASIC -Funktion "Str$" verwendet immer einen Dezimalpunkt.
⚠ Die Ausgabe des folgenden Beispiels sieht man so nur dann, wenn das Zahlenformat des Betriebssystems entsprechend eingestellt wurde.
Direktbereich
? 2.1 : ? Str$( 3.1 ) : ? VBA.Strings.Format$( 4.1 )
2,1
3.1
4,1
Die Funktion "Format" hat ein optionales Argument, das es erlaubt, ein Formatierungsmuster anzugeben. Der Punkt "." kennzeichnet darin die Stelle des Dezimaltrennzeichens.
Direktbereich
? VBA.Strings.Format$( 5459.4, "##,##0.00" )
5.459,40
? VBA.Strings.Format$( Expression := 5459.4, Format := "##,##0.00" )
5.459,40
Wenn die Zahl für das vorgegebene Format zu groß ist, wird sie trotzdem angezeigt.
Direktbereich
? VBA.Strings.Format$( 5459.4, "##.0" ) : ? VBA.Strings.Format$( 5459.4, "00.0" )
5459,4
5459,4
Bei nicht mehr darstellbaren Nachkommastellen wird gerundet.
Direktbereich
? VBA.Strings.Format$( 2.454, "##.00" )
2,45
? VBA.Strings.Format$( 2.455, "##.00" )
2,46
? VBA.Strings.Format$( 2.456, "##.00" )
2,46
Das Zeichen "#" und das Zeichen "0" können für eine Ziffer stehen. Allerdings werden Anfangsnullen oder Endnullen nur bei Verwendung des Zeichens "0" geschrieben.
Direktbereich
? VBA.Strings.Format$( 59.4, "##,###.####" )
59,4
? VBA.Strings.Format$( 59.4, "00,000.0000" )
00.059,4000
? VBA.Strings.Format$( 0.5, "#.#" )
,5
? VBA.Strings.Format$( 0.5, "0.#" )
0,5
Die Verwendung des Kommas "," bestimmt, daß ein Tausendertrennzeichen ausgegeben wird.
Direktbereich
? VBA.Strings.Format$( 123456, "##,###.0##" )
123.456,0
Dabei ist es egal, wo das Komma steht.
Direktbereich
? VBA.Strings.Format$( 123456, "####,#.0##" )
123.456,0
Das Komma wird aber nach dem Punkt ignoriert.
Direktbereich
? VBA.Strings.Format$( 123456, "#####.0#,#" )
123456,0
Es können vor dem Punkt auch mehrere Kommas stehen. Die Wirkung ist die gleiche wie bei der Verwendung eines einzelnen Kommas, solange das Komma nicht direkt vor dem Punkt steht,
Direktbereich
? VBA.Strings.Format$( 123456, "###,,##.0##" )
123.456,0
Wenn das Komma direkt vor dem Punkt geschrieben wird, dann wird der Zahlenwert durch 1000 geteilt (Angabe in Promille).
Direktbereich
? VBA.Strings.Format$( 123456, "#####,.0##" )
123,456
Werden direkt vor dem Punkt mehrere Kommas verwendet, so wird der Wert so oft durch 1000 geteilt, wie direkt vor dem Punkt stehende Kommas vorhanden sind.
Direktbereich
? VBA.Strings.Format$( 123456, "#####,,.0##" )
,123
? VBA.Strings.Format$( 123456, "#####,,,.0######" )
,0001235
Ein weiteres Tausendertrennzeichen, das nicht direkt vor dem Dezimaltrennzeichen steht, kann wieder bestimmen, ob ein Tausendertrennzeichen ausgegeben wird.
Direktbereich
? VBA.Strings.Format$( 1234567890124, "#####,,.0##" )
1234567,89
? VBA.Strings.Format$( 1234567890124, "####,#,,.0##" )
1.234.567,89
Zeichen, die für die Formatierung keine besondere Bedeutung haben, werden so ausgegeben, wie sie im zweiten Argument vorkommen.
Direktbereich
? VBA.Strings.Format$( 2.33, "A = ###.###")
A = 2,33
Es ist aber bekanntlich auch ohne Zeichen im Formatierungstext möglich, Text vor einer Zahl auszugeben.
Direktbereich
? "A = "; :? VBA.Strings.Format$( 2.33, "###.###")
A = 2,33
Zeichen, die nach einem inversen Schrägstrich stehen, werden immer uninterpretiert ausgegeben. Da verschiedene Zeichen eine besondere Bedeutung haben, die hier noch nicht erwähnt wurde, ist es sicher, wörtlich auszugebenden Zeichen immer einen Rückstrich voranzustellen.
Direktbereich
? VBA.Strings.Format$( 2.33, "\A\B\C\ \=\ \\\###.###")
ABC = \#2,33
Um ein Feld einer bestimmten Größe aufzufüllen, kann der Text, den die Funktion "Format" ergibt, erneut formatiert werden. Bei Verwendung des Platzhalters "@" wird das damit dargestellte Feld rechtsbündig gefüllt, so daß es damit möglich wird, Zahlen rechtsbündig in einem Feld einer bestimmten Breite so untereinander zu schreiben, daß die Dezimaltrennzeichen untereinander stehen, wenn dafür gesorgt wird, daß alle Zahlen gleich viele Nachkommastellen haben.
Direktbereich
? VBA.Strings.Format$( VBA.Strings.Format$( 2.34, "0.00" ), "@@@@@@@@@@" )
2,34
? VBA.Strings.Format$( VBA.Strings.Format$( 212.33424, "0.00" ), "@@@@@@@@@@" )
212,33