Tipp 10.5 - Zahl in Wort

Wie kann ich eine Zahl in ein Wort umwandeln?

Mit dieser Funktion können Sie eine Zahl in ein Wort umwandeln. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.

Beispiel:

Option Explicit
 
Public Function NumberToWord(ByVal lNumber As Long, _
       Optional bWithDashes As Boolean = True) As String
'// --------------------------------------------------------
'// Methode:  | Konvertiert eine Zahl in ein Wort
'// --------------------------------------------------------
'// Parameter:| lNumber    -zu konvertierende Ganzzahl
'//           | bWithDashes-steuert einschließende Striche
'// -------------------------------------------------------
'// Rückgabe: | konvertierte Zahl
'// --------------------------------------------------------
'// Beispiel: |?NumberToWord(1658)
'//           |--- Einstausendsechshundertachtundfünfzig ---
'// --------------------------------------------------------
'// Autor:    | Stefan Kulpa
'//           | EDV Innovation & Consulting - Dormagen
'// --------------------------------------------------------
    Dim sNumber     As String
    Dim lThousand   As Long
    Dim iMillion    As Long
    Dim lSingle     As Long
 
    On Error Resume Next
    sNumber = Format$(lNumber, "000000000")
    If Len(sNumber) > 9 Then
        NumberToWord = "***"
        Exit Function
    End If
 
    iMillion = CInt(Left$(sNumber, 3))
    lThousand = CInt(Mid$(sNumber, 4, 3))
    lSingle = CInt(Right$(sNumber, 3))
 
    NumberToWord = "--- " & BlockToWords(iMillion)
    If iMillion > 0 Then
        NumberToWord = NumberToWord & "millionen"
    End If
    NumberToWord = NumberToWord & BlockToWords(lThousand)
    If lThousand > 0 Then
        NumberToWord = NumberToWord & "tausend"
    End If
 
    NumberToWord = NumberToWord & BlockToWords(lSingle)
    If Right$(LCase(NumberToWord), 3) = "ein" Then
        NumberToWord = Replace(NumberToWord, "ein", "eins")
    End If
 
    NumberToWord = _
    StrConv(NumberToWord & " ---", vbProperCase)
 
    If Not bWithDashes Then
        NumberToWord = Trim(Replace(NumberToWord, "-", ""))
    End If
 
End Function
 
Private Function BlockToWords _
                (ByVal lBlock As Long) As String
 
    Dim l1              As Long
    Dim l2              As Long
    Dim l3              As Long
    Dim asNumber(12)    As String
 
    On Error Resume Next
    asNumber(0) = "": asNumber(1) = "ein"
    asNumber(2) = "zwei": asNumber(3) = "drei"
    asNumber(4) = "vier": asNumber(5) = "fünf"
    asNumber(6) = "sechs": asNumber(7) = "sieben"
    asNumber(8) = "acht": asNumber(9) = "neun"
    asNumber(10) = "zehn": asNumber(11) = "elf"
    asNumber(12) = "zwölf"
 
    l1 = lBlock \ 100
    l2 = (lBlock - l1 * 100) \ 10
    l3 = lBlock - l1 * 100 - l2 * 10
 
    BlockToWords = asNumber(l1)
    If l1 > 0 Then BlockToWords = _
                   BlockToWords & "hundert"
 
    Select Case l2 * 10 + l3
        Case 1:
        BlockToWords = BlockToWords & "ein"
        Case 2 To 12:
        BlockToWords = BlockToWords & asNumber(l2 * 10 + l3)
        Case 13 To 19:
        BlockToWords = _
        BlockToWords & _
                    Choose(l2 * 10 + l3 - 12, "dreizehn", _
                    "vierzehn", "fünfzehn", "sechzehn", _
                    "siebzehn", "achtzehn", "neunzehn")
        Case Is > 19:
        BlockToWords = BlockToWords & asNumber(l3)
        If (l2 * 10 + l3) Mod 10 <> 0 Then
            BlockToWords = BlockToWords & "und"
            BlockToWords = _
            BlockToWords & _
                    Choose(l2 - 1, "zwanzig", "dreißig", _
                    "vierzig", "fünfzig", "sechzig", _
                    "siebzig", "achtzig", "neunzig")
        Else
            BlockToWords = _
            BlockToWords & _
                    Choose(l2 - 1, "zwanzig", "dreißig", _
                    "vierzig", "fünfzig", "sechzig", _
                    "siebzig", "achtzig", "neunzig")
        End If
    End Select
 
End Function