Home > Artikel > Ausgabe 4/2012 > Die Format-Funktion

Die Format-Funktion

  PDF ansehen

  Download PDF

Access bietet verschiedene Stellen und Möglichkeiten, Daten für die Ausgabe in die gewünschte Form zu bringen. Eine wichtige Variante ist die Format-Funktion: Sie können diese überall einsetzen, wo Daten aus Tabellen angezeigt oder per VBA-Code zugewiesen werden. Dieser Artikel stellt die Format-Funktion im Detail vor.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1204_Format.mdb.

Parameter der Format-Funktion

Die Format-Funktion verwendet vier Parameter. Der erste enthält den zu formatierenden Ausdruck, wobei dieser als Zahl oder in Anführungszeichen als Zeichenkette angegeben werden kann, aber auch als Variable oder VBA-Funktion beziehungsweise als Referenz auf ein Steuerelement oder ein Feld einer Tabelle oder Abfrage. Es funktionieren also beispielsweise folgende Varianten:

Debug.Print Format(1234567890, ...)

Debug.Print Format("1234567890", ...)

Dim strAusdruck As String

strAusdruck = "1234567890"

Debug.Print Format(strAusdruck, ...)

Debug.Print Format(Me!txtAusdruck, ...)

Debug.Print Format(rst!Ausdruck)

Debug.Print Format(DLookup("Ausdruck", "tblAusdruecke"), ...)

Der zweite Parameter erwartet eine Anweisung, wie der Ausdruck formatiert werden soll. Dabei kann es sich um ein benanntes Format handeln, wie es auch etwa für die Format-Eigenschaft von Tabellen- und Abfragefeldern oder Formular- oder Berichtssteuerelementen ausgewählt werden kann (mehr dazu im Artikel Daten für die Ausgabe formatieren).

Der vorliegende Artikel konzentriert sich jedoch auf die Verwendung benutzerdefinierter Formatierungen, bei denen Sie den Ausdruck mithilfe geeigneter Platzhalter und Literale formatieren.

Der dritte und vierte Parameter wird nur berücksichtigt, wenn ein Datumsausdruck formatiert werden soll – dazu später mehr.

Deutsch und Englisch

Wie bei anderen VBA-Funktionen auch können Sie

Benutzerdefinierte Zahlenformate

Ein häufiger Anwendungsfall für die Format-Funktion ist die Formatierung von Zahlen. Das Zahlenformat wird dabei aus verschiedenen Zeichen zusammengesetzt, die entweder als Platzhalter oder als Literal verwendet werden. Dabei handelt es sich um die folgenden Zeichen:

  • 0: Das Zeichen 0 ist der Platzhalter für eine Ziffer oder 0. Wenn die entsprechende Stelle keine Ziffer enthält, wird statt der Ziffer das Zeichen 0 angezeigt. Damit lassen sich beispielsweise führende 0-Zeichen anzeigen:
  • Raute (#): Das Raute-Zeichen verhält sich grundsätzlich wie das 0-Zeichen. Allerdings wird, wenn an der Stelle des Raute-Zeichens keine Zahl vorliegt, nichts angezeigt:
  • Punkt (.): Der Punkt ist der Platzhalter für ein Dezimalzeichen. Warum benötigt man dafür einen Platzhalter? Nun: Je nach dem in der Systemsteuerung festgelegten Gebietsschema verwendet Access unterschiedliche Trennzeichen wie das Komma oder den Punkt. Beispiele haben Sie bereits oben gesehen.
  • Prozentzeichen (%): Das Prozentzeichen hat mehrere Funktionen. Zunächst wird es dem Ausdruck hinzugefügt. Außerdem sorgt es dafür, dass der angegebene Zahlenwert mit 100 multipliziert wird:
  • Komma (,): Das Komma wird als Tausendertrenn­zeichen interpretiert:
  • Wissenschaftliches Format (E+, E-, e+, e-): Hiermit können Sie Zahlen im wissenschaftlichen Format anzeigen. Beispiele:

Zahlen mit Einheit anzeigen

Wenn Sie Zahlen mit Einheit anzeigen möchten, also beispielsweise 0°C oder 27,50 €, fügen Sie die entsprechenden Literale in der Regel einfach zum Zahlenformat hinzu:

Debug.Print Format(0, "0°C")

0°C

Vom Wert abhängige Formatierung

Bei der Formatierung von Zahlenwerten können Sie für positive und negative Zahlen sowie für 0 und NULL verschiedene Formatierungen festlegen. Dazu legen Sie die Formate in dieser Reihenfolge durch Semikola statt eines einzelnen Formatausdrucks fest.

Die folgende Funktion gibt beispielsweise für 1 den Ausdruck Positiv: 1, für -1 den Ausdruck Negativ: -1 und für 0 den Ausdruck Neutral: 0 aus:

Public Function Multiformat(Optional lngZahl As Long)

     Debug.Print Format(lngZahl, µ """Positiv: ""0;""Negativ: ""0;""Neutral: ""0")

End Function

Datum formatieren

Für Datumsangaben gibt es eine Reihe spezieller Platzhalter, mit denen Sie das Datum beliebig formatieren können. Speziell bei den Platzhaltern für Tage, Monate, Jahre, Stunden, Minuten und Sekunden müssen Sie darauf achten, unter VBA die englische und in den übrigen Ausdrücken die deutsche Variante zu verwenden – diese werden in der folgenden Auflistung jeweils angegeben.

  • Doppelpunkt (:): Der Doppelpunkt agiert als Zeittrennzeichen. Je nach Systemeinstellungen wird der Doppelpunkt beibehalten oder durch das lokale Zeittrennzeichen ersetzt. In deutschen Systemen wird der Doppelpunkt verwendet:
  • Schrägstrich (/):Der Schrägstrich ist das Trennzeichen für Datumsangaben. Im Gegensatz zum Doppelpunkt bei Uhrzeiten wird der Schrägstrich in Deutschland durch den Punkt ersetzt:
  • d (in Ausdrücken auf deutschsprachigen Systemen: t): Zeigt den Tag als Zahl ohne führende Null an (1-31).
  • dd (tt): Zeigt den Tag als Zahl mit führender Null an, wenn der Tag weniger als zwei Stellen hat (01-31).
  • ddd (ttt): Zeigt den Tag als Abkürzung mit zwei Buchstaben an (Mo, Di, Mi, Do, Fr, Sa, So).
  • dddd (tttt): Zeigt den Tag ausgeschrieben an (Montag, Dienstag, ...).
  • ddddd (ttttt): Zeigt das Datum als kurzes Datumsformat an (wie in der Systemsteuerung festgelegt), in Deutschland also standardmäßig im Format dd.mm.yyyy.
  • dddddd (tttttt): Zeigt das Datum im langen Datumsformat an.
  • w: Zeigt den Wochentag als Zahl an (1-7). Welcher Tag welcher Zahl entspricht, legen Sie mit dem dritten Parameter der Format-Funktion fest (siehe weiter unten).
  • ww: Liefert die Kalenderwoche als Zahl (1-54). Um festzulegen, welche Woche die erste Woche im Jahr ist und an welchem Tag diese beginnt, verwenden Sie den dritten und vierten Parameter der Format-Funktion – siehe weiter unten).
  • m: Zeigt den Monat als Zahl ohne führende Null an (1-12). Ausnahme: Wenn m im Rahmen eines Zeitformats verwendet wird und unmittelbar auf h oder hh folgt, wird die Minute ausgegeben.
  • mm: Liefert den Monat als zweistellige Zahl (01-12). Auch hier gilt die Ausnahme bezüglich des Zeitformats.
  • mmm: Gibt den Monat als Abkürzung zurück (Jan, Feb, Mrz, Apr, Mai, Jun, Jul, Aug, Sep, Okt, Nov, Dez).
  • mmmm: Gibt den Monat ausgeschrieben zurück (Januar, Februar, ...).
  • q: Zeigt das Quartal an (1-4).
  • y (j): Zeigt den Kalendertag als Zahl an (1-366).
  • yy (jj): Zeigt die letzten beiden Stellen der Jahreszahl an.
  • yyyy (jjjj): Zeigt die Jahreszahl mit vier Stellen an.
  • h: Zeigt die Stunde als Zahl ohne führende Null an (0-23).
  • hh: Zeigt die Stunde als Zahl mit führender Null an (00-23).
  • n: Zeigt die Minute als Zahl ohne führende Null an (0-59). Direkt hinter h oder hh können Sie auch m als Platzhalter für Minuten verwenden.
  • nn: Zeigt die Minute als Zahl mit führender Null an (00-59). Direkt hinter h oder hh können Sie auch mm als Platzhalter für Minuten verwenden.
  • s: Zeigt die Sekunde als Zahl ohne führende Null an (0-59).
  • ss: Zeigt die Sekunde als Zahl mit führender Null an (00-59).
  • AM/PM: Liefert für 0:00-11:59 Uhr den Wert AM und für 12:00 bis 23:59 Uhr den Wert PM zurück.
  • am/pm: Wie oben, nur in Kleinbuchstaben.

Erster Tag der Woche

Bei einigen Datumsplatzhaltern spielt es eine Rolle, welcher Tag als erster Tag der Woche festgelegt ist (außerdem besagt etwa das Arbeitszeitgesetz, dass die Arbeitswoche von Montag, 0:00 Uhr bis Sonntag, 24:00 Uhr dauert). Dies legen Sie, wenn Sie einen von den Systemeinstellungen abweichenden Tag verwenden möchten, in der Format-Funktion mit dem dritten Parameter fest.

Welcher Tag standardmäßig der erste Tag der Woche ist, finden Sie beispielsweise mit einer Formatanweisung ohne den dritten Parameter heraus:

Debug.Print Format("20.3.2012", "w")

3

Der 20.3.2012 ist ein Dienstag und liefert den Wert 3, also entspricht der Sonntag dem ersten Tag der Woche. Alternativ schauen Sie einfach beim Anlegen der Funktion im VBA-Editor auf die Parameterliste (siehe Bild 1). Dort erkennen Sie, dass der Sonntag als erster Tag der Woche verwendet wird und dass die erste Woche diejenige ist, in die der erste Januar fällt.

Standardwerte für den dritten und vierten Parameter der Format-Funktion ermitteln

Bild 1: Standardwerte für den dritten und vierten Parameter der Format-Funktion ermitteln

Wenn Sie möchten, dass in der Format-Funktion als erster Tag der Woche der Montag verwendet wird, legen Sie den dritten Parameter wie folgt fest:

Debug.Print Format("20.3.2012", "w", vbMonday)

2

Der Dienstag wird nun als zweiter Tag der Woche bestätigt, somit ist Montag der erste Tag der Woche.

Erste Woche des Jahres

Wenn Sie mit dem Platzhalter ww die Kalenderwoche ermitteln möchten, müssen Sie gegebenenfalls festlegen, wie die erste Woche des Jahres überhaupt ermittelt wird. Nach DIN 1355-1/ISO 8601 ist die erste Woche des Jahres die erste Woche, die mindestens vier Tage enthält. In der Standardeinstellung verwendet die Format-Funktion die Woche als erste Kalenderwoche, in die der 1. Januar fällt – das wäre für deutsche Verhältnisse aber wohl zu einfach.

Also müssen Sie, um korrekte Ergebnisse zu erhalten, erstens festlegen, dass der Montag der erste Tag der Woche ist und zweitens, dass die erste Kalenderwoche des Jahres die erste Woche ist, die vier Tage enthält. Zum Glück bietet die Format-Funktionen einen entsprechenden Wert für den vierten Parameter an:

Debug.Print format("1.1.2012", "ww", vbMonday, µ

                                    vbFirstFourDays)

52

Dieses Ergebnis lässt sich wie folgt interpretieren: Der 1.1.2012 ist ein Sonntag, also der letzte Tag der Woche. Die erste Woche des Jahres ist also diejenige, die am 2.1.2012 beginnt. Die Funktion liefert also als Wert für die Kalenderwoche richtigerweise 52, was der letzten Kalenderwoche des Vorjahres entspricht. Der gleiche Aufruf für den 2.1.2012 würde dann den Wert 1 liefern.

Berücksichtigen Sie dies, wenn Sie Kalenderwochen mit der Format-Funktion ermitteln.

Zeichenfolgen formatieren

Auch Zeichenfolgen lassen sich mit der Format-Anweisung formatieren. Die folgende Liste stellt zunächst die möglichen Platzhalter vor:

  • @: Platzhalter für ein Zeichen. Liefert das an der entsprechenden Position befindliche Zeichen, sonst ein Leerzeichen. Somit lassen sich Zeichenketten mit führenden Leerzeichen auffüllen (der Unterstrich steht stellvertretend für das Leerzeichen):
  • &: Ebenfalls ein Platzhalter für ein Zeichen. Der Unterschied zu @ ist, dass nicht vorhandene Zeichen nicht durch das Leerzeichen ersetzt werden, sondern schlicht Nichts ausgegeben wird.
  • <: Gibt die Zeichenfolge in Großbuchstaben aus:
  • >: Gibt die Zeichenfolge in Kleinbuchstaben aus:

Sonderformatierung für leere Zeichenketten

Wenn die Format-Funktion nicht mit Literalen gefüllt wird, sondern – war normalerweise der Fall ist – über eine Variable, einen Ausdruck oder eine Funktion, kann es sein, dass der zu formatierende Wert eine leere Zeichenkette ist.

Die Format-Funktion bietet die Möglichkeit, gesondert auf solche Fälle zu reagieren beziehungsweise in diesem Fall eine spezielle Zeichenfolge auszugeben. Wenn bei Übergabe einer leeren Zeichenfolge beispielsweise der Ausdruck Keine Daten geliefert werden soll, gelingt dies mit folgender Variante:

Public Sub LeereZeichenfolge()

     Dim strZeichenfolge As String

     strZeichenfolge = ""

     Debug.Print Format(strZeichenfolge, "@;Keine Daten")

End Sub

Einsatz der Zeichformatierung

Mal abgesehen vom praktischen Nutzen, den das Auffüllen mit Leerzeichen liefert: Was soll man eigentlich mit den beiden Platzhaltern @ und & in der Praxis anfangen?

Das ist ganz einfach: Sie greifen mit den Platzhaltern auf die einzelnen Zeichen der Zeichenfolge zu und können diese beliebig ausgeben – allein die Reihenfolge muss erhalten bleiben. Wenn Sie beispielsweise zwischen jedes Zeichen ein Leerzeichen einfügen wollen, gelingt dies mit folgender Anweisung:

Debug.Print format("abcd", "& & & &")

a b c d

Wir wollen jedoch auch die Kehrseite der Medaille betrachten: Das Formatieren von Texten setzt in der Regel eine vorhersehbare Länge der Zeichenkette voraus. Wenn Sie beispielsweise eine variable Zeichenkette mit Leerzeichen zwischen jedem einzelnen Zeichen auffüllen wollten, müssten Sie erstens einen ausreichend langen Ausdruck erstellen. Und zweitens würde dieser überzählige Leerzeichen hinten (oder vorne, je nach Formatierungsausdruck) anhängen.

Telefonnummer in Zweierpacks ausgeben

Telefonnummern bieten eine Menge Beispielmaterial für die Format-Funktion. Wenn Sie beispielsweise von hinten gesehen immer Zahlenpaare erhalten möchten, könnte dies so aussehen:

Debug.Print Format("4493444", "&& && && && &&")

4 49 34 44

Nun soll aber keine Zahl allein stehen. Wenn Sie wissen, dass die Telefonnummer aus sieben Ziffern besteht, würde dieses Format helfen:

Debug.Print Format("4493444", "&&& && &&")

449 34 44

Dummerweise variiert aber heutzutage sowohl die Anzahl der Ziffern der Vorwahl als auch der Rufnummer, sodass Sie mit der Format-Funktion keine brauchbare Lösung finden werden – außer, Sie prüfen vorher die Länge der Telefonnummer und rufen eine davon abhängige Format-Funktion auf.

Bankleitzahlen

Besser klappt es schon mit Bankleitzahlen. Diese werden in der Regel nach dem Schema xxx xxx xx angegeben. Das erreichen Sie mit diesem Format:

Debug.Print Format("35040038", "&&& &&& &&")

350 400 38