Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zahl in Betrag in Worten umwandeln

Zahl in Betrag in Worten umwandeln
03.02.2008 10:00:47
Max
hallo ihr EXCEL-Freaks,
drucke Schecks / Wechsel aus. Die notwendigen Angaben befinden sich in einem EXCEL-Blatt. Dort sind alle Angaben wie Empfänger, Ausstellungsdatum, Ort, Betreff, Aussteller, Adresse etc. gespeichert. Per Makro werden dann alle Schecks / Wechsel ausgedruckt. Der Betrag in Worten muss als einziges jeweils manuell eingegeben werden.
Das gleiche gilt auch für Überweisungsvordrucke (allerdings dort ohne Angabe des Betrages in Worten).
Suche eine Möglichkeit alternativ über Formel bzw. benutzerdefinierte Funktion den Betrag in Worten aus dem Feld Betrag_in_EURO zu erhalten.
Wäre toll, wenn ihr mir weiterhelfen könntet.
Gruss Max Berg

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: http://www.excelformeln.de/tips.html?welcher=3
03.02.2008 10:23:00
Max
Hallo Matthias L,
Die Seite wurde nicht gefunden
Liegt dies an mir ?
Gruss Max

Anzeige
nimm den Link von Hajo, der funktioniert __oT
03.02.2008 10:34:00
Hajo,

benutzerdefinierte Funktion für mehrere Sprachen
03.02.2008 10:44:00
Max
Hallo Hajo_Zi,
danke das sieht ja schon mal super aus.
Trotzdem wäre es wahnsinnig toll, wenn man das ganze in eine benutzerdefinierte Funktion einpacken könnte, wobei ein Argument die Sprache wäre, in der der Betrag in Worten gebraucht wird.
Bin ja erst seit einigen Tagen im Internet und seit 4 Tagen erstmals in einem Forum. Bin ganz begeistert über die Qualität und Schnelligkeit der Antworten. Schade, dass ich mich solange gegen das Internet gewehrt habe. Hätte mir wahnsinnig viel Arbeit ersparen können.
Mit bestem Gruss an dich und alle Forumsfreunde
Gruss Max Berg

Anzeige
AW: benutzerdefinierte Funktion für mehrere Sprachen
03.02.2008 11:17:00
Hajo_Zi
Hallo Max,
eine Funktion ist VBA und so eine Lösung wirst Du auf der Seite kaum finden. Was spricht gegen die Lösung, es wird die Sprache doch auch angegeben?
Gruß Hajo

AW: benutzerdefinierte Funktion für mehrere Sprach
03.02.2008 13:57:14
Max
Hallo Hajo,
ich brauche den Betrag in Worten in einem Blatt in mehreren Zellen.
Spalte B Spalte C Spalte D Spalte E
EURO Betrag in Worten Betrag in Worten Betrag in Worten
Deutsch Englisch Französisch
10 zehn ten dix
200 zweihundert twohundred deuxcent
2.500 zweitausendfünfhundert twothousandfivehundred deuxmillescinqcent
Muss es leider so primitiv darstellen, denke dass ich mal "Jeanie Html" studieren muss. Meinst du, das wäre sinnvoll?
Ich verwende zur Zeit noch 3 Formeln (für deutsch, englisch und französisch)v, von denenich eine der Zelle zuweise. In dieser Zelle steht die Formel für die jeweilige Landessprache. Diese wiederum enthält jede Menge Namen, der wiederum Formeln zugewiesen sind. Damals hatte ich eine Woche lang daran gebastelt und war ganz stolz. Heute würde ich das aber sicher eleganter machen, mir fehlt nur die Zeit, außerdem funktionierts ja.
Nur eleganter und für meine Mitarbeiter verständlicher wäre eine benutzerdefinierte Funktion.
Übrigens sieht die Formel für deutsch folgendermaßen aus:
=WENN(GANZZAHL(Z_/10^6) 999;" G r ö ß e n w a h n s i n n i g ? ";WENN(Z_M=1;"eine Million";~f~
~f~SVERWEIS(KÜRZEN(Z_M/100;0);Z_V;5)&WENN(REST(Z_M;100)=1;"eine";~f~
~f~WENN(UND(REST(Z_M;100) 9;REST(Z_M;100) 20);SVERWEIS(REST(Z_M;10);Z_V;3);~f~
~f~SVERWEIS(REST(Z_M;10);Z_V;2))&WENN(UND(REST(Z_M;10) 0;REST(Z_M;100) 20);"und";"")~f~
~f~)&Z_J&WENN(Z_M 1;" Millionen~f~ ~f~";""))&SVERWEIS(KÜRZEN(Z_T/100;0);Z_V;5)&WENN(REST(Z_T;100)=1~f~
~f~;"ein";WENN(UND(REST(Z_T;100) 9;REST(Z_T;100) 20);SVERWEIS(REST(Z_T;10);Z_V;3);~f~
~f~SVERWEIS(REST(Z_T;10);Z_V;2))&WENN(UND(REST(Z_T;10)>0;REST(Z_T;100) 20);"und";""))~f~
~f~&Z_Z&WENN(Z_T~f~
~f~=1;"tausend";"")&SVERWEIS(KÜRZEN(Z_E/100;0);Z_V;5)&WENN(REST(Z_E;100)=1;~f~
~f~"eins";Z_X)&Z_Y)&" DM"~f~
Das kann ja keine Sau verstehen und ich kanns heute auch nicht mehr nachvollziehen.
Zur kompletten Verwirrung hier noch einige von 13 Unter-Nahmen, denen ich Formeln zugewiesen habe.
Hier eine Auswahl:
Z_=DRUCK!$AN$12
Z_E=RUNDEN(REST(KÜRZEN(RUNDEN(DRUCK!Z_;2);0);10^3)/10^0;0)
Z_J=WENN(REST(DRUCK!Z_M;100) 19;SVERWEIS(REST(DRUCK!Z_M;100)/10;DRUCK!Z_V;4);"")
Z_M=RUNDEN(REST(KÜRZEN(RUNDEN(DRUCK!Z_;2);-6);10^9)/10^6;0)
Z_T=RUNDEN(REST(KÜRZEN(RUNDEN(DRUCK!Z_;2);-3);10^6)/10^3;0)
~f~Z_X=WENN(UND(REST(DRUCK!Z_E;100)>9;REST(DRUCK!Z_E;100)<20);SVERWEIS(REST(DRUCK!Z_E;10);DRUCK!Z_V;3);SVERWEIS(REST(DRUCK!Z_E;10);DRUCK!Z_V;2))&WENN(UND(REST(DRUCK!Z_E;10)>0;REST(DRUCK!Z_E;100)>20);"und";"")~f~
~f~Z_Y=WENN(REST(DRUCK!Z_E;100)>19;SVERWEIS(REST(DRUCK!Z_E;100)/10;DRUCK!Z_V;4);"")
Irgendwie habe ich den Eindruck, dass der ganze Käse hier für ein Forum unpassen ist. Da ich im Forum nach erst 4 Tagen noch ziemlich unerfahren bin, wäre ich über einen Kommentar hierzu dankbar. Ich bin für eine ehrliche, sachliche Antwort dankbar und bestimmt nicht böse.
Gruss und noch einen schönen Sonntag wünscht
Max Berg
P.S. Beim klicken auf die Vorschau kam ein Hinweis, dass html Grösser oder kleiner - Zeichen nicht unterstützt. Sorry ;-(
Tut mir leid ich machs in dieser Form im Forum ganz bestimmt nicht wieder.

Anzeige
AW: benutzerdefinierte Funktion für mehrere Sprach
03.02.2008 14:11:00
Nepumuk
Hallo Max,
hier mal eine Funktion dazu. Allerdings nur in deutsch. Aber mit "VBA gut" solltest du dir das schon hinbiegen können.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Function ZahlWort(dblZahl As Double, Optional bolArt As Variant) As String
    Dim arrArt As Variant
    Dim intCounter As Integer, intCts As Integer
    Dim strWert As String, strTmp As String, strSuffix As String
    On Error Resume Next
    If bolArt = 1 Then
        If Err = 0 Then
            intCts = (dblZahl - Fix(dblZahl)) * 100
            If intCts <> 0 Then strSuffix = " " & Format(CStr(intCts), "00") & "/100"
        Else
            bolArt = 0
        End If
    End If
    On Error GoTo 0
    dblZahl = Fix(dblZahl)
    strTmp = Right$(CStr(dblZahl), 3)
    strWert = Part(strTmp)
    For intCounter = 1 To 4
        strTmp = CStr(dblZahl)
        Select Case Len(strTmp)
            Case Is < 1 + 3 * intCounter
                ZahlWort = strWert & strSuffix
                Exit Function
            Case Is < 4 + 3 * intCounter
                strTmp = Left$(strTmp, Len(strTmp) - intCounter * 3)
            Case Else
                strTmp = Left$(Right$(strTmp, 3 + intCounter * 3), 3)
        End Select
        Select Case intCounter
            Case 1: arrArt = Array("tausend", "eintausend")
            Case 2: arrArt = Array("millionen", "einemillion")
            Case 3: arrArt = Array("milliarden", "einemillarde")
            Case 4: arrArt = Array("billionen", "einebillion")
        End Select
        If Right$(CStr(dblZahl), 3) = "000" Then
            strWert = Part(strTmp) & arrArt(0)
        ElseIf Cint(strTmp) = 1 Then
            strWert = arrArt(1) & strWert
        Else
            strWert = Part(strTmp) & arrArt(0) & strWert
        End If
    Next intCounter
    ZahlWort = strWert & strSuffix
End Function

Private Function Part(strPart As String) As String
    Dim arrA As Variant, arrB As Variant, arrC As Variant
    Dim strTmp As String
    arrA = Array("null", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun")
    arrB = Array("elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", "sechzehn", "siebzehn", "achtzehn", "neunzehn")
    arrC = Array("zehn", "zwanzig", "dreißig", "vierzig", "fünfzig", "sechzig", "siebzig", "achtzig", "neunzig")
    If Len(strPart) = 1 Then
        strTmp = arrA(Cint(Right$(strPart, 1)))
    ElseIf Right$(strPart, 2) = "00" Then
        If Left$(strPart, 1) = "1" Then
            Part = "einhundert"
        Else
            Part = arrA(Cint(Left$(strPart, 1))) & "hundert"
        End If
        Exit Function
    ElseIf Mid$(strPart, Len(strPart) - 1, 1) = "0" Then
        strTmp = arrA(Cint(Right$(strPart, 1)))
    ElseIf Mid$(strPart, Len(strPart) - 1, 1) = "1" Then
        If Cint(Right$(strPart, 1)) <> 0 Then
            strTmp = arrB(Cint(Right$(strPart, 2)) - 11)
        Else
            strTmp = arrC(Cint(Mid$(strPart, Len(strPart) - 1, 1)) - 1)
        End If
    ElseIf Cint(Mid$(strPart, Len(strPart) - 1, 1)) > 1 Then
        Select Case Right$(strPart, 1)
            Case "0"
                strTmp = arrC(Cint(Mid$(strPart, Len(strPart) - 1, 1)) - 1)
            Case "1"
                strTmp = "einund" & _
                    arrC(Cint(Mid$(strPart, Len(strPart) - 1, 1)) - 1)
            Case Else
                strTmp = arrA(Cint(Right$(strPart, 1))) & "und" & _
                    arrC(Cint(Mid$(strPart, Len(strPart) - 1, 1)) - 1)
        End Select
    End If
    If Len(strPart) = 3 Then
        Select Case Left$(strPart, 1)
            Case "0"
            Case "1"
                strTmp = "einhundert" & strTmp
            Case Else
                strTmp = arrA(Cint(Left$(strPart, 1))) & "hundert" & strTmp
        End Select
    End If
    Part = strTmp
End Function

In der Tabelle dann so:
 AB
1  2.277,34 € zweitausendzweihundertsiebenundsiebzig 34/100
2       22,00 € zweiundzwanzig
3       33,70 € dreiunddreißig 70/100
4            -   € null
5  1.111,00 € eintausendeinhundertelf
6  1.984,00 € eintausendneunhundertvierundachtzig
7  2.003,00 € zweitausenddrei

Formeln der Tabelle
ZelleFormel
B1=WENN(ISTZAHL(A1); zahlwort(A1;1); "")
B2=WENN(ISTZAHL(A2); zahlwort(A2;1); "")
B3=WENN(ISTZAHL(A3); zahlwort(A3;1); "")
B4=WENN(ISTZAHL(A4); zahlwort(A4;1); "")
B5=WENN(ISTZAHL(A5); zahlwort(A5;1); "")
B6=WENN(ISTZAHL(A6); zahlwort(A6;1); "")
B7=WENN(ISTZAHL(A7); zahlwort(A7;1); "")

Gruß
Nepumuk

Anzeige
AW: benutzerdefinierte Funktion für mehrere Sprach
03.02.2008 15:18:00
Max
Hallo Nepumuk,
tausend Dank! Sieht wirklich super aus (mein Kompliment und meinen Respekt).
Hab allerdings noch Probleme. Die Formel liefert in Spalte 'B' liefert im Moment noch '#NAME?'.
Das liegt daran dass ich beim Einfügen der benutzterdefinierten Funktionen
die Funktion 'Ein_Kulturschaffender.htm!ZahlWort' angezeigt bekomme.
Ich habe heute mal versucht eine Bildschirmkopie unter dem Namen
'Ein_Kulturschaffender.htm!ZahlWort' abzuspeichern. Ich werde daher später dein Makro und das EXCEL-Blatt in eine neuen Datei reinzubringen. Ein benutzerdefinierte Funktion von mir klappt jetzt auch nicht mehr.
Im Moment brauche ich aber eine grosse Pause. Bin erschlagen von dem Ganzen!
Wäre froh, wenn ich das im Forum so darstellen könnte wie du. Ich nehme an du hast mit Jeanie-html (oder wie das heisst) gearbeitet.
Würde mich gerne revanchieren, aber ich glaube so einem Profi wie dir (für mich bist du z.Zt. ein Genie) kann ich EXCEL-mäßig nichts beibringen.
Habe jetzt gerade mal nach den vielen heutigen Beiträgen von dir nachgesehen. Was das Problem SAP-Listen nach EXCEL zu transportieren habe ich Erfahrungen bis zum Excess. Ich musste zwar mit SAP arbeiten, die Konzernzentrale hat mir aber keine Rechte gegeben, so habe ich mir die aufwendigsten Listen nach EXCEL heruntergeladen und per Makro abgearbeitet. Dabei habe ich per Makro den einzelnen Bereich Namen pro Blatt für jeden Bereich gegeben. Das hat alles super funktioniert. Durfte nur keiner wissen, wie ich SAP vergewaltigt/überlistet habe.
Ich glaube aber, dass sowas nicht ins Forum gehört, weil das kein Mensch versteht und ich übers Forum gar nicht alles erklären kann.
Nochmals vielen Dank
Gruss Max Berg
P.S. Werde deine Beiträge künftig mit Interesse verfolgen. Deinen Nick kann man sich ja leicht merken. :-)

Anzeige
Das machst Du schon richtig...
05.02.2008 15:04:06
{Boris}
Hi Max,
P.S. Werde deine [Nepumuks] Beiträge künftig mit Interesse verfolgen.
Damit triffst Du eine weise Entscheidung. VBA-Beiträge mit mehr Qualitätsgehalt gibt´s hier nämlich nicht (gilt auch für K.Rola und Sepp).
Grüße Boris

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zahl in Betrag in Worten umwandeln in Excel


Schritt-für-Schritt-Anleitung

Um eine Zahl in einen Betrag in Worten in Excel umzuwandeln, kannst Du eine benutzerdefinierte VBA-Funktion verwenden. Hier ist eine einfache Anleitung, wie Du das umsetzen kannst:

  1. Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Erstelle ein neues Modul:

    • Klicke auf Einfügen > Modul.
  3. Füge den folgenden VBA-Code ein:

    Option Explicit
    
    Public Function ZahlWort(dblZahl As Double) As String
       Dim arrEinheiten As Variant
       Dim arrZehner As Variant
       Dim arrHunderter As Variant
    
       arrEinheiten = Array("", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun")
       arrZehner = Array("", "zehn", "zwanzig", "dreißig", "vierzig", "fünfzig", "sechzig", "siebzig", "achtzig", "neunzig")
       arrHunderter = Array("", "hundert")
    
       Dim strWort As String
       Dim intZahl As Integer
    
       intZahl = Int(dblZahl)
    
       If intZahl < 10 Then
           strWort = arrEinheiten(intZahl)
       ElseIf intZahl < 100 Then
           strWort = arrZehner(Int(intZahl / 10)) & IIf(intZahl Mod 10 <> 0, arrEinheiten(intZahl Mod 10), "")
       Else
           strWort = arrEinheiten(Int(intZahl / 100)) & arrHunderter(0) & IIf(intZahl Mod 100 <> 0, "und" & ZahlWort(intZahl Mod 100), "")
       End If
    
       ZahlWort = strWort
    End Function
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Verwende die Funktion in einer Zelle, indem Du =ZahlWort(A1) eingibst, wobei A1 die Zelle mit der Zahl ist, die Du in Worte umwandeln möchtest.


Häufige Fehler und Lösungen

  • #NAME?-Fehler: Dieser Fehler tritt oft auf, wenn die Funktion nicht korrekt in das Modul eingefügt wurde. Stelle sicher, dass der VBA-Code ohne Fehler kopiert wurde.

  • Falsche Ausgaben: Überprüfe, ob die Zahl in der richtigen Form vorliegt. Die Funktion erwartet eine gültige Zahl und gibt einen leeren String zurück, wenn die Eingabe ungültig ist.

  • Zahl wird nicht umgewandelt: Vergewissere Dich, dass Du die Funktion korrekt aufrufst und die Zelle mit der Zahl korrekt referenzierst.


Alternative Methoden

Wenn Du keine VBA-Funktion verwenden möchtest, kannst Du auch auf externe Add-Ins zurückgreifen, die die Funktionalität bieten, Beträge in Worten umzuwandeln. Eine weitere Möglichkeit ist die Verwendung von Excel-Formeln, die sehr komplex sein können und oft nicht die Flexibilität einer VBA-Lösung bieten.


Praktische Beispiele

Zahl Betrag in Worten
10 =ZahlWort(10)
200 =ZahlWort(200)
2500 =ZahlWort(2500)
2777.34 =ZahlWort(2777) & " " & "34/100"
  • Beispiel mit Cent: Um "2777.34" in Worten auszugeben, kannst Du die Formel so erweitern: =ZahlWort(2777) & " " & "34/100".

Tipps für Profis

  • Erweiterung der Funktion: Du kannst die Funktion so anpassen, dass sie auch mit Cents korrekt umgeht. Füge einfach eine Logik hinzu, die den Dezimalteil der Zahl behandelt.

  • Mehrsprachigkeit: Wenn Du eine mehrsprachige Lösung brauchst, kannst Du die Funktion so erweitern, dass sie den gewünschten Sprachparameter akzeptiert.

  • Fehlerbehandlung: Implementiere Fehlerbehandlung in Deiner Funktion, um sicherzustellen, dass die Eingabewerte gültig sind und die Funktion nicht abstürzt.


FAQ: Häufige Fragen

1. Wie kann ich die Funktion für andere Sprachen anpassen? Du kannst die Arrays in der Funktion entsprechend der Sprache anpassen und zusätzliche Bedingungen hinzufügen, um verschiedene Sprachoptionen zu berücksichtigen.

2. Funktioniert dies in jeder Excel-Version? Ja, die Funktion sollte in allen modernen Excel-Versionen funktionieren, die VBA unterstützen.

3. Kann ich auch Beträge in englischer Sprache umwandeln? Ja, Du musst lediglich die Arrays für die englischen Zahlenwörter erstellen und die Funktion anpassen, um die englische Ausgabe zu ermöglichen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige