Discussion:
Frage Zahlenformat (Nachkommastellen .-- statt .00)
(zu alt für eine Antwort)
Louis Noser
2020-05-11 06:59:12 UTC
Permalink
Hallo miteinander

Ich möchte, dass eine Ganzzahl mit zwei Bindestrichen angezeigt wird und
nicht mit zwei Nullen. Also zB. 45.-- statt 45.00. Bei Zahlen mit zwei
Nachkommastellen sollen diese jedoch auch erscheinen.

Muss ich das mit eher umständlichen wenn-dann-Konstruktionen realisieren
oder geht das mit einem einzigen "Format(Zahl;Formatanweisung)"?

Meine Versuche:

1.

=Format([Betrag];"#'###.--")

formt Excel selbsttätig in
=Format([Betrag];"#\'#.--")
um.

Ergebnis:
10'0.-- (statt 100.--)
200'0.-- (statt 2'000.--)
9'1.-- (statt 90.90)

Schon mal das ist mir ein Rätsel. Warum formt Access meinen Formatbefehl
automatisch um?
Hat es mit den Windowseinstellungen für das Zeichen der
Zifferngruppierung zu tun (gerader oder schräger Apostroph)?

2.

=Format([Betrag];"#.--")
(diesmal formt Access nicht um)

Ergebnis:
100.--
2000.-- (schöner wäre die Tausendergruppierung)
91.-- (statt 90.90)

Vielen Dank für Hinweise.

Grüsse
Louis
Louis Noser
2020-05-11 07:20:14 UTC
Permalink
Post by Louis Noser
formt Excel selbsttätig in
=Format([Betrag];"#\'#.--")
um.
Hier meinte ich natürlich "Access" und nicht "Excel". :-)

Grüsse
Louis
HR Ernst
2020-05-11 07:55:41 UTC
Permalink
Post by Louis Noser
Hallo miteinander
Ich möchte, dass eine Ganzzahl mit zwei Bindestrichen angezeigt wird und
nicht mit zwei Nullen. Also zB. 45.-- statt 45.00. Bei Zahlen mit zwei
Nachkommastellen sollen diese jedoch auch erscheinen.
Muss ich das mit eher umständlichen wenn-dann-Konstruktionen realisieren
oder geht das mit einem einzigen "Format(Zahl;Formatanweisung)"?
1.
=Format([Betrag];"#'###.--")
formt Excel selbsttätig in
=Format([Betrag];"#\'#.--")
um.
10'0.-- (statt 100.--)
200'0.-- (statt 2'000.--)
9'1.-- (statt 90.90)
Schon mal das ist mir ein Rätsel. Warum formt Access meinen Formatbefehl
automatisch um?
Hat es mit den Windowseinstellungen für das Zeichen der
Zifferngruppierung zu tun (gerader oder schräger Apostroph)?
2.
=Format([Betrag];"#.--")
(diesmal formt Access nicht um)
100.--
2000.-- (schöner wäre die Tausendergruppierung)
91.-- (statt 90.90)
Vielen Dank für Hinweise.
Grüsse
Louis
Warum verwendest du nicht
=Format([Betrag];"#.###,--") (Punkt und Komma) anstatt
=Format([Betrag];"#'###.--") (Hochkomma und Punkt)?
=Format([Betrag];"#,--") (Komma) anstatt =Format([Betrag];"#.--") (Punkt)?

Also: In Excel mit Rechtsklick "Zellen formatieren" wählen ->
Benutzerdefiniert -> #.##0,00 auswählen und darüber (unterhalb von Typ:)
in #.##0,-- ändern -> OK

Wie man damit aber 90,90 anzeigen soll, weiß ich nicht. Scheint mir aber
bei deiner Forderung mit "X,--" auch nicht logisch.
--
Gruß

HR Ernst
Louis Noser
2020-05-11 09:01:10 UTC
Permalink
Post by HR Ernst
=Format([Betrag];"#.###,--") (Punkt und Komma) anstatt
Ergebnis:
100.,--
2000.,--
90.9,-- (Original: 90.9)
Post by HR Ernst
=Format([Betrag];"#'###.--") (Hochkomma und Punkt)?
Ergebnis:
Umformung durch Access in =Format([Betrag];"#\'#.--")

10'0.--
200'0.--
9'1.-- (Original: 90.9)
Post by HR Ernst
=Format([Betrag];"#,--") (Komma)
Ergebnis:
100,--
2000,--
91,-- (Original: 90.9)

Meine Windowseinstellungen bezüglich Dezimalzeichen etc:
https://workupload.com/file/FKEEbfwYvxg

Grüsse
Louis
Louis Noser
2020-05-11 10:14:52 UTC
Permalink
Post by HR Ernst
Wie man damit aber 90,90 anzeigen soll, weiß ich nicht. Scheint mir aber
bei deiner Forderung mit "X,--" auch nicht logisch.
Mir schon.

Eine Ganzzahl soll irgendwas.-- ausgegeben werden, eine Kommazahl mit
den jeweiligen 2 Dezimalstellen.

Grüsse
Louis
HR Ernst
2020-05-11 11:55:47 UTC
Permalink
Post by Louis Noser
Hallo miteinander
Ich möchte, dass eine Ganzzahl mit zwei Bindestrichen angezeigt wird und
nicht mit zwei Nullen. Also zB. 45.-- statt 45.00. Bei Zahlen mit zwei
Nachkommastellen sollen diese jedoch auch erscheinen.
Muss ich das mit eher umständlichen wenn-dann-Konstruktionen realisieren
oder geht das mit einem einzigen "Format(Zahl;Formatanweisung)"?
1.
=Format([Betrag];"#'###.--")
formt Excel selbsttätig in
=Format([Betrag];"#\'#.--")
um.
10'0.-- (statt 100.--)
200'0.-- (statt 2'000.--)
9'1.-- (statt 90.90)
Schon mal das ist mir ein Rätsel. Warum formt Access meinen Formatbefehl
automatisch um?
Hat es mit den Windowseinstellungen für das Zeichen der
Zifferngruppierung zu tun (gerader oder schräger Apostroph)?
2.
=Format([Betrag];"#.--")
(diesmal formt Access nicht um)
100.--
2000.-- (schöner wäre die Tausendergruppierung)
91.-- (statt 90.90)
Vielen Dank für Hinweise.
Grüsse
Louis
Beim Karl hast du ganz bestimmt schon nachgesehen, oder?
http://www.donkarl.com

Vielleicht fällt Karl oder dem Ulrich (Möller) ja noch etwas ein...

Ich bin raus.
--
Gruß

HR Ernst
Louis Noser
2020-05-11 21:22:27 UTC
Permalink
Post by HR Ernst
Beim Karl hast du ganz bestimmt schon nachgesehen, oder?
Ja, schon. Aber leider nichts gefunden.

Ich habe jetzt selber eine Lösung entwickelt. Eine Monsterformel. Aber
es scheint zu funktionieren:

=Wenn(Länge(Format([einbezahltletztesmal];"#.00"))>6;Links(Format([einbezahltletztesmal];"#.00");Länge(Format([einbezahltletztesmal];"#.00"))-6)
& "'") &
Rechts(Links(Format([einbezahltletztesmal];"#.00");InStr(1;Format([einbezahltletztesmal];"#.00");"."));4)
&
Wenn(Rechts(Format([einbezahltletztesmal];"#.00");2)="00";"--";Rechts(Format([einbezahltletztesmal];"#.00");2))

Erklärung:
Die zu formatierende Zahl wird als String verarbeitet. Wenn sie mehr als
6 Zeichen hat (zB. 999.00 = als String 6 Zeichen, mit Punkt und
Nachkommastellen), dann wir ein Apostroph als Tausender-Trennzeichen
hingepflanzt. Dann werden die 100er- bis 1er-Stellen sowie der
Dezimalpunkt angefügt und zum Schluss entweder ein "--" bei Ganzzahl
oder dann die entsprechenden beiden Nachkommastellen.

Ich ahne, dass es möglicherweise einfacher ginge.

Jedenfalls funktionierts. Das reicht mir vollkommen aus.

Grüsse
Louis
Louis Noser
2020-05-12 07:27:06 UTC
Permalink
Post by Louis Noser
=Wenn(Länge(Format([einbezahltletztesmal];"#.00"))>6;Links(Format([einbezahltletztesmal];"#.00");Länge(Format([einbezahltletztesmal];"#.00"))-6)
& "'") &
Rechts(Links(Format([einbezahltletztesmal];"#.00");InStr(1;Format([einbezahltletztesmal];"#.00");"."));4)
&
Wenn(Rechts(Format([einbezahltletztesmal];"#.00");2)="00";"--";Rechts(Format([einbezahltletztesmal];"#.00");2))
Dieser Code funktioniert für sich alleine in einem Testbericht tadellos.

Wenn ich ihn aber über das Zoom-Fenster in einen längeren Text/Code
einbetten will, ignoriert Access die Kopieraktion, d.h. nach Bestätigung
mit ok behält das Feld den alten Inhalt.

Es ist ein Textfeld in einem Bericht. Beim Steuerelementinhalt handelt
es sich um den nachstehenden Text/Code.

Ist dieser Text/Code zu lange?

Vielen Dank.

Grüsse
Louis



=Wenn([BriefAnredeDuSie]=1;"Wir freuen uns, dass wir Dich zu unseren
grosszügigen Passivmitgliedern zählen dürfen. Dein jährlicher Zustupf
hilft uns sehr, unsere Bilanz im Lot zu halten.";"Wir freuen uns, dass
wir Sie zu unseren grosszügigen Passivmitgliedern zählen dürfen. Ihr
jährlicher Zustupf hilft uns sehr, unsere Bilanz im Lot zu halten.") &
Wenn(Nz([einbezahltLetztesMal])<>0;"

" & Wenn([BriefAnredeDuSie]=1;"Das letzte Mal hast Du uns ";"Das letzte
Mal haben Sie uns ") & " mit CHF " &
Wenn(Länge(Format([einbezahltletztesmal];"#.00"))>6;Links(Format([einbezahltletztesmal];"#.00");Länge(Format([einbezahltletztesmal];"#.00"))-6)
& "'") &
Rechts(Links(Format([einbezahltletztesmal];"#.00");InStr(1;Format([einbezahltletztesmal];"#.00");"."));4)
&
Wenn(Rechts(Format([einbezahltletztesmal];"#.00");2)="00";"--";Rechts(Format([einbezahltletztesmal];"#.00");2)))
& " unterstützt. Vielen herzlichen Dank!") & "

" & Wenn([BriefAnredeDuSie]=1;"Dürfen wir auch heuer wieder mit Deiner
Hilfe rechnen?";"Dürfen wir auch heuer wieder mit Ihrer Hilfe rechnen?") & "

" & Wenn([BriefAnredeDuSie]=1;"Wir werden Dich ohne Deine anderslautende
Anweisung in den nächsten Konzertprogrammen gerne als Gönner aufführen,
sollte Dein Jahresbeitrag CHF 100.-- oder mehr betragen. Bitte beachte
auch, dass die Mindestgrenze bei unseren Jahresbeiträgen bei CHF 20.--
liegt.

Auch gut zu wissen: Wenn Du über Dein Bank- oder Postkonto einzahlst,
erreicht uns Dein Beitrag vollumfänglich. Wohingegen wir bei
Bareinzahlungen am Postschalter einen um Spesen reduzierten Betrag
erhalten.";"Wir werden Sie ohne Ihre anderslautende Anweisung in den
nächsten Konzertprogrammen gerne als Gönner aufführen, sollte Ihr
Jahresbeitrag CHF 100.-- oder mehr betragen. Bitte beachten Sie auch,
dass die Mindestgrenze bei unseren Jahresbeiträgen bei CHF 20.-- liegt.

Auch gut zu wissen: Wenn Sie über Ihr Bank- oder Postkonto einzahlen,
erreicht uns Ihr Beitrag vollumfänglich. Wohingegen wir bei
Bareinzahlungen am Postschalter einen um Spesen reduzierten Betrag
erhalten.")
Ulrich Möller
2020-05-12 08:35:40 UTC
Permalink
Hallo Louis,
Post by Louis Noser
Post by Louis Noser
=Wenn(Länge(Format([einbezahltletztesmal];"#.00"))>6;Links(Format([einbezahltletztesmal];"#.00");Länge(Format([einbezahltletztesmal];"#.00"))-6)
& "'") &
Rechts(Links(Format([einbezahltletztesmal];"#.00");InStr(1;Format([einbezahltletztesmal];"#.00");"."));4)
&
Wenn(Rechts(Format([einbezahltletztesmal];"#.00");2)="00";"--";Rechts(Format([einbezahltletztesmal];"#.00");2))
Dieser Code funktioniert für sich alleine in einem Testbericht tadellos.
Wenn ich ihn aber über das Zoom-Fenster in einen längeren Text/Code
einbetten will, ignoriert Access die Kopieraktion, d.h. nach
Bestätigung mit ok behält das Feld den alten Inhalt.
Es ist ein Textfeld in einem Bericht. Beim Steuerelementinhalt handelt
es sich um den nachstehenden Text/Code.
Ist dieser Text/Code zu lange?
=Wenn([BriefAnredeDuSie]=1;"Wir freuen uns, dass wir Dich zu unseren
grosszügigen Passivmitgliedern zählen dürfen. Dein jährlicher Zustupf
hilft uns sehr, unsere Bilanz im Lot zu halten.";"Wir freuen uns, dass
wir Sie zu unseren grosszügigen Passivmitgliedern zählen dürfen. Ihr
jährlicher Zustupf hilft uns sehr, unsere Bilanz im Lot zu halten.") &
Wenn(Nz([einbezahltLetztesMal])<>0;"
" & Wenn([BriefAnredeDuSie]=1;"Das letzte Mal hast Du uns ";"Das
letzte Mal haben Sie uns ") & " mit CHF " &
Wenn(Länge(Format([einbezahltletztesmal];"#.00"))>6;Links(Format([einbezahltletztesmal];"#.00");Länge(Format([einbezahltletztesmal];"#.00"))-6)
& "'") &
Rechts(Links(Format([einbezahltletztesmal];"#.00");InStr(1;Format([einbezahltletztesmal];"#.00");"."));4)
&
Wenn(Rechts(Format([einbezahltletztesmal];"#.00");2)="00";"--";Rechts(Format([einbezahltletztesmal];"#.00");2)))
& " unterstützt. Vielen herzlichen Dank!") & "
" & Wenn([BriefAnredeDuSie]=1;"Dürfen wir auch heuer wieder mit Deiner
Hilfe rechnen?";"Dürfen wir auch heuer wieder mit Ihrer Hilfe
rechnen?") & "
" & Wenn([BriefAnredeDuSie]=1;"Wir werden Dich ohne Deine
anderslautende Anweisung in den nächsten Konzertprogrammen gerne als
Gönner aufführen, sollte Dein Jahresbeitrag CHF 100.-- oder mehr
betragen. Bitte beachte auch, dass die Mindestgrenze bei unseren
Jahresbeiträgen bei CHF 20.-- liegt.
Auch gut zu wissen: Wenn Du über Dein Bank- oder Postkonto einzahlst,
erreicht uns Dein Beitrag vollumfänglich. Wohingegen wir bei
Bareinzahlungen am Postschalter einen um Spesen reduzierten Betrag
erhalten.";"Wir werden Sie ohne Ihre anderslautende Anweisung in den
nächsten Konzertprogrammen gerne als Gönner aufführen, sollte Ihr
Jahresbeitrag CHF 100.-- oder mehr betragen. Bitte beachten Sie auch,
dass die Mindestgrenze bei unseren Jahresbeiträgen bei CHF 20.-- liegt.
Auch gut zu wissen: Wenn Sie über Ihr Bank- oder Postkonto einzahlen,
erreicht uns Ihr Beitrag vollumfänglich. Wohingegen wir bei
Bareinzahlungen am Postschalter einen um Spesen reduzierten Betrag
erhalten.")
du solltest nicht so lange, geschachtelte Ausdrücke verwenden. Besser du
setzt das als Funktion um und weist dem Steuerelement das Ergebnis per
Funktion direkt und nicht per Ausdruck zu.

Ulrich
Louis Noser
2020-05-12 09:12:45 UTC
Permalink
Post by Ulrich Möller
du solltest nicht so lange, geschachtelte Ausdrücke verwenden. Besser du
setzt das als Funktion um und weist dem Steuerelement das Ergebnis per
Funktion direkt und nicht per Ausdruck zu.
Du hast sicher Recht. Wahrscheinlich wäre es als Funktion einfacher zu
programmieren gewesen und auch leichter, später mal was zu ändern oder
zu korrigieren.

Aber ich hatte schon die Mühe und würde es schade finden, das zu löschen.

Jedenfalls habe ich die Formel in ein separates Steuerelement gepackt
und im eigentlichen Text/Code darauf verwiesen. So funktionierts.

Aber danke für die Tipps.

Grüsse
Louis
Ulrich Möller
2020-05-12 00:37:31 UTC
Permalink
Hallo Louis,
Post by Louis Noser
Ich möchte, dass eine Ganzzahl mit zwei Bindestrichen angezeigt wird
und nicht mit zwei Nullen. Also zB. 45.-- statt 45.00. Bei Zahlen mit
zwei Nachkommastellen sollen diese jedoch auch erscheinen.
Muss ich das mit eher umständlichen wenn-dann-Konstruktionen
realisieren oder geht das mit einem einzigen
"Format(Zahl;Formatanweisung)"?
das geht nicht mit einer einzigen Format-Anweisung und man müsste schon
die zwei Format-Anweisungen mit einem Wenn() eingesetzt werden.

Alternativ in einem Modul folgende Funktion:

Public Function MyFormat(ByVal Value As Variant) As Variant
  If CInt(Value) = CDbl(Value) Then
    MyFormat = Format$(Value, "#,##0.\-\-")
  Else
    MyFormat = Format$(Value, "#,##0.00")
  End If
End Function

und dann als Steuerelementinhalt z.B. der Ausdruck:

= MyFormat([Betrag])

Das setzt aber voraus, daß deine "Ganzzahl" in Wirklichkeit auch
Nachkommastellen hat und bereits auf max. 2 Nachkommastellen gerundet
ist, sonst gibt das keinen Sinn.

Ulrich
Ulrich Möller
2020-05-12 00:40:38 UTC
Permalink
Hallo Louis,
Post by Louis Noser
Ich möchte, dass eine Ganzzahl mit zwei Bindestrichen angezeigt wird
und nicht mit zwei Nullen. Also zB. 45.-- statt 45.00. Bei Zahlen mit
zwei Nachkommastellen sollen diese jedoch auch erscheinen.
Muss ich das mit eher umständlichen wenn-dann-Konstruktionen
realisieren oder geht das mit einem einzigen
"Format(Zahl;Formatanweisung)"?
das geht nicht mit einer einzigen Format-Anweisung und man müsste schon
zwei Format-Anweisungen, welche mit einem Wenn() gekoppelt sind, einsetzen.

Alternativ in einem Modul folgende Funktion:

Public Function MyFormat(ByVal Value As Variant) As Variant
  If CInt(Value) = CDbl(Value) Then
    MyFormat = Format$(Value, "#,##0.\-\-")
  Else
    MyFormat = Format$(Value, "#,##0.00")
  End If
End Function

und dann als Steuerelementinhalt z.B. der Ausdruck:

= MyFormat([Betrag])

Das setzt aber voraus, daß deine "Ganzzahl" in Wirklichkeit auch
Nachkommastellen hat und bereits auf max. 2 Nachkommastellen gerundet
ist, sonst gibt das keinen Sinn.

Ulrich
Louis Noser
2020-05-12 07:16:18 UTC
Permalink
Post by Ulrich Möller
Public Function MyFormat(ByVal Value As Variant) As Variant
  If CInt(Value) = CDbl(Value) Then
    MyFormat = Format$(Value, "#,##0.\-\-")
  Else
    MyFormat = Format$(Value, "#,##0.00")
  End If
End Function
= MyFormat([Betrag])
Vielen Dank für den Code.

Mittlerweile habe ich schon selbst was geschrieben, und es funktioniert
sogar wunschgemäss.

Vielleicht kann ich Deinen Code doch noch irgendwann bei einer nächsten
Anforderung verwenden.

Grüsse
Louis
Ulrich Möller
2020-05-12 22:41:39 UTC
Permalink
Nachtrag:

kleine Korrektur für die Verarbeitung von NULL-Werten:

Public Function MyFormat(ByVal Value As Variant) As Variant
  If IsNull(Value) Then
    MyFormat = vbNullString
  ElseIf CInt(Value) = CDbl(Value) Then
    MyFormat = Format$(Value, "#,##0.\-\-")
  Else
    MyFormat = Format$(Value, "#,##0.00")
  End If
End Function

Ulrich
Post by Ulrich Möller
Public Function MyFormat(ByVal Value As Variant) As Variant
  If CInt(Value) = CDbl(Value) Then
    MyFormat = Format$(Value, "#,##0.\-\-")
  Else
    MyFormat = Format$(Value, "#,##0.00")
  End If
End Function
Lesen Sie weiter auf narkive:
Suchergebnisse für 'Frage Zahlenformat (Nachkommastellen .-- statt .00)' (Fragen und Antworten)
5
Antworten
Summe bei Excel?
gestartet 2007-12-25 06:28:19 UTC
software
Loading...