expertenaustausch > comp.* > comp.datenbanken.ms-access

Louis Noser (11.05.2020, 08:59)
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 (11.05.2020, 09:20)
Am 11.05.2020 um 08:59 schrieb Louis Noser:
> formt Excel selbsttätig in
> =Format([Betrag];"#\'#.--")
> um.


Hier meinte ich natürlich "Access" und nicht "Excel". :-)

Grüsse
Louis
HR Ernst (11.05.2020, 09:55)
Am Mon, 11 May 2020 08:59:12 +0200 schrieb Louis Noser:

[..]
> 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.
Louis Noser (11.05.2020, 11:01)
Am 11.05.2020 um 09:55 schrieb HR Ernst:
> =Format([Betrag];"#.###,--") (Punkt und Komma) anstatt


Ergebnis:
100.,--
2000.,--
90.9,-- (Original: 90.9)

> =Format([Betrag];"#'###.--") (Hochkomma und Punkt)?


Ergebnis:
Umformung durch Access in =Format([Betrag];"#\'#.--")

10'0.--
200'0.--
9'1.-- (Original: 90.9)

> =Format([Betrag];"#,--") (Komma)


Ergebnis:
100,--
2000,--
91,-- (Original: 90.9)

Meine Windowseinstellungen bezüglich Dezimalzeichen etc:


Grüsse
Louis
Louis Noser (11.05.2020, 12:14)
Am 11.05.2020 um 09:55 schrieb 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 (11.05.2020, 13:55)
Am Mon, 11 May 2020 08:59:12 +0200 schrieb Louis Noser:

[..]
> Vielen Dank für Hinweise.
> Grüsse
> Louis


Beim Karl hast du ganz bestimmt schon nachgesehen, oder?


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

Ich bin raus.
Louis Noser (11.05.2020, 23:22)
Am 11.05.2020 um 13:55 schrieb 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
Ulrich Möller (12.05.2020, 02:37)
Hallo Louis,

Am 11.05.2020 um 08:59 schrieb 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 (12.05.2020, 02:40)
Hallo Louis,

Am 11.05.2020 um 08:59 schrieb 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 (12.05.2020, 09:16)
Am 12.05.2020 um 02:40 schrieb 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
> und dann als Steuerelementinhalt z.B. der Ausdruck:
> = 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
Louis Noser (12.05.2020, 09:27)
Am 11.05.2020 um 23:22 schrieb 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 (12.05.2020, 10:35)
Hallo Louis,

Am 12.05.2020 um 09:27 schrieb Louis Noser:
> Am 11.05.2020 um 23:22 schrieb Louis Noser:
> 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?


[..]
> 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 (12.05.2020, 11:12)
m 12.05.2020 um 10:35 schrieb 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 (13.05.2020, 00:41)
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

Am 12.05.2020 um 02:40 schrieb Ulrich Möller:
[..]
Ähnliche Themen