Excel Zahl aufsplittern

  • Excel

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Runshak.

    Excel Zahl aufsplittern

    Hallo Allerseits,

    ich bin mir nicht sicher, ob ich das mit Excel VB machen muss oder ob das mit Bordmitteln von Excel machbar ist.

    ich habe eine Rechnung und der Endbetrag soll unten in der Rechnung nochmal separat angegeben werden jedoch nicht einfach als Zahl sondern

    5678€

    5 Tausend 6 Hundert 7 Zehn 8 Einer €

    Wäre schön wenn mich jemand auf die richtige Fährte bringen kann, bzw. sagen kann wonach ich genau suchen muss

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Runshak schrieb:

    5 Tausend 6 Hundert 7 Zehn 8 Einer €
    Möchtest du das wirklich so in der Rechnung stehen haben?
    Oder sollte da nicht ​Fünftausendsechshundertachtundsiebzig stehen?
    Aber egal welche Variante, ich gehe davon aus, dass du da eine User Defined Function in VBA schreiben musst.
    Das geht im ersten Fall relativ einfach, im zweiten Fall wird es etwas länglicher.

    Falls du aber es mit nativen Excel-Funktionen versuchst, wirst du dir einen abbrechen müssen.
    Wie groß kann die Zahl maximal werden?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    ist dem Fall so gewünscht, also muss es so rein.

    Ist für einen chinesischen Kunden. Ich würde es also auf Chinesische Zahlen ändern.

    Zehntausend wäre am größten.

    Aber vermutlich komme ich dann tatsächlich nicht um VBA rum. Schade, dachte Excel könnte sowas ganz einfach machen :saint:

    1万 2仟 3 佰 4拾 5元 6角7分 wäre hier jetzt zum Beispiel 12345,67

    Und da Chinesen es gerne kompliziert haben wäre jede Zahl natürlich auch nochmal ein Schriftzeichen. Aber das müsste in VBA ja dann einfach Umwandelbar sein.

    Runshak schrieb:

    wäre jede Zahl natürlich auch nochmal ein Schriftzeichen
    Ziffern-Positionssystem auf Chinesisch.
    Ich sehe da zwei Tabellen:
    Eine für das Ziffern-Zeichen, eine für den Positions-Namen.
    Übersetzen nach VBA musst Du das selber:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Ziffern() As String = {"null", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun"}
    3. Private Position() As String = {"Einer", "Zehner", "Hunderter", "Tausender", "Zehntausender"}
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim value = 56789
    6. Dim index = 0
    7. Dim txt = ""
    8. Do While value > 0
    9. Dim ziff = value Mod 10
    10. value \= 10 ' Integer-Division
    11. txt = Ziffern(ziff) & " " & Position(index) & " " & txt
    12. index += 1
    13. Loop
    14. Label1.Text = txt
    15. End Sub
    16. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ () aus folgendem Grund: Index des Positionsstrings korrigiert

    Jetzt nur noch den offensichtlichen Fehler beseitigen und das mit dem Komma einbauen und Du wärst vermutlich am Ziel.
    btw: Wieviele Nachkommastellen kann/wird es geben?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das Prinzip ist wirklich super, das Übersetzen sollte auch kein Thema sein. Zumindest sollten meine VBA Kenntnisse dafür ausreichend sein.

    Aber wie kann ich jetzt anstelle von den deutschen/englischen Zahlenwerten auf chinesische Schriftzeichen verweisen? VBA lässt es nicht zu, dass man im VBA-Code chinesische Schriftzeichen verwendet. Muss man das irgendwie über Hexwerte oder Unicode handhaben?

    Bearbeitet:

    Es wird nur zwei Nachkommastellen geben. Aber ohne "." oder ",". Es gibt nur zwei Schriftzeichen dafür

    für 12345,67

    yi wan
    er qian
    san bai
    si shi
    wu yuan
    liu jiao (erste nachkommastelle)
    qi fen (zweite nachkommastelle)

    und halt alles als Schriftzeichen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Runshak“ ()

    @Runshak Soll das Programm in China auf einem Rechner mit Default-Sprache chinesisch laufen?
    Für die Zehntel und Hundertstel machst Du einen Trick, damit die Integer-Arithmetik greift:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Ziffern() As String = {"null", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun"}
    3. Private Position() As String = {"Hundertstel", "Zehntel", "Einer", "Zehner", "Hunderter", "Tausender", "Zehntausender"}
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim value2 = 56789.42
    6. Dim value = CInt(value2 * 100)
    7. Label2.Text = value.ToString
    8. Dim index = 0
    9. Dim txt = ""
    10. Do While value > 0
    11. Dim ziff = value Mod 10
    12. value \= 10
    13. txt = Ziffern(CInt(ziff)) & " " & Position(index) & " " & txt
    14. index += 1
    15. Loop
    16. Label1.Text = txt
    17. End Sub
    18. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Runshak
    Damit du chinesische Schriftzeichen in VBA verwenden kannst, muss man die Sprache für Unicode-inkompatible Programme auf Chinesisch umstellen.
    Hier eine Anleitung
    How To Display Foreign Characters In Excel VBE

    [edit]Gerade selbst getestet, hat mir meine Access-Anwendung unlauffähig gemacht. Also mit Vorsicht zu geniesen[\edit]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „HenryV“ ()

    ich glaub im SourceCode-Austausch ist ein alter, langer Thread, und eine feine Lösung, wie man Zahlen in Worten ausdrücken kann.
    Allerdings nur für deutsch.
    Aber wenn du das wieder findest, vielleicht kannste Teile davon übernehmen - es war ziemlich knifflig.
    leider fällt mir grad kein guter Suchbegriff ein, wie man das wiederfindet.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Habe jetzt die verschiedenen Punkte zusammengeführt. Es funktioniert so wie gewünscht.
    Danke für eure Hilfe

    Quellcode

    1. Option Explicit
    2. Sub Insert()
    3. Dim Ziffern() As Variant
    4. 'Ziffern = Array(ChrW$(&H96F6), ChrW$(&H58F9), ChrW$(&H8D30), ChrW$(&H53C1), ChrW$(&H8086), ChrW$(&H4F0D), ChrW$(&H9646), ChrW$(&H67D2), ChrW$(&H634C), ChrW$(&H7396))
    5. Ziffern = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
    6. Dim Position() As Variant
    7. Position = Array(ChrW$(&H5206), ChrW$(&H89D2), ChrW$(&H5143), ChrW$(&H62FE), ChrW$(&H4F70), ChrW$(&H4EDF), ChrW$(&H4E07))
    8. Dim Zahl As Variante
    9. Zahl = 16974.65
    10. Dim Index As Integer
    11. Dim txt As Variant
    12. Dim ziff As Integer
    13. 'Zahl = Worksheets("Fapiao").Range("M30").Value
    14. Zahl = Zahl * 100
    15. Index = 0
    16. txt = ""
    17. Do While Zahl > 0
    18. ziff = Zahl Mod 10
    19. Zahl = Zahl \ 10
    20. txt = Ziffern(CInt(ziff)) & " " & Position(Index) & " " & txt
    21. Index = Index + 1
    22. Loop
    23. Worksheets("Fapiao").Range("C40").Value = txt
    24. End Sub



    Die Ausgabe mit den Schriftzeichen funktioniert hervorragend.

    Bearbeitet:

    Habe einen blöden Fehler gemacht. Deswegen hat die Rechnung nicht funktioniert.

    Die Ausgabe sieht jetzt wie folgt aus

    壹 万 陆 仟 玖 佰 柒 拾 肆 元 陆 角 伍 分 = 16.974,65

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Runshak“ ()