Cijfers naar Tekst

  • Onderwerp starter Onderwerp starter etri
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

etri

Gebruiker
Lid geworden
20 jul 2007
Berichten
672
Naar aanleiding van de handtekening van WilliamXXX werd ik getriggerd voor het volgende.
Dit lid schrijft cijfers om tekst (tot 1 miljard), dus 12345 als "twaalfduizenddriehonderdvijfenveertig".

Ik heb geprobeerd in VBA (in Excel) een programmaatje te maken dat automatisch cijfers omzet in teksten. Graag jullie reactie op mijn code die ik hieronder heb staan, en voor het gemak in een voorbeeldbestand heb bijgesloten (zie reactie hieronder...).

Be kind... :)

Code:
Option Explicit

Public Array1, Array1e1, Array20, Array1e2, Array1e3, Array1e6, Array1e9

Public Function CijferNaarTekst(ByVal cijfer As Long) As String
    On Error GoTo ErrHandler
    
    Array1 = Array("", "een", "twee", "drie", "vier", "vijf", "zes", "zeven", "acht", "negen")
    Array1e1 = Array("", "tien", "twintig", "dertig", "veertig", "vijftig", "zestig", "zeventig", "tachtig", "negentig")
    Array20 = Array("", "elf", "twaalf", "dertien", "veertien", "vijftien", "zestien", "zeventien", "achttien", "negentien")
    Array1e2 = Array("honderd")
    Array1e3 = Array("duizend")
    Array1e6 = Array("miljoen")
    Array1e9 = Array("miljard")

    'Cijfer = 112311
    If cijfer < 1000 Then
        CijferNaarTekst = CNT3(cijfer)
    ElseIf cijfer < 1000000# Then
        CijferNaarTekst = CNT6(cijfer)
    ElseIf cijfer < 1000000000# Then
        CijferNaarTekst = CNT9(cijfer)
    ElseIf cijfer < 1000000000000# Then
        CijferNaarTekst = CNT12(cijfer)
    End If
    
    Exit Function
    
ErrHandler:
    MsgBox "Een fout is opgetreden:" & vbCrLf & Err.Description

End Function

Private Function CNT2(ByVal cijfer As Long) As String
    If cijfer < 10 Then
        CNT2 = Array1(cijfer)
    ElseIf cijfer < 20 Then
        CNT2 = Array20(cijfer - 10)
    ElseIf cijfer < 100# Then
        CNT2 = Array1(cijfer Mod 10) & "en" & Array1e1(cijfer \ 10)
    End If
End Function

Private Function CNT3(ByVal cijfer As Long) As String
    If Len(Array1(cijfer \ 100)) > 0 Then
        CNT3 = Array1(cijfer \ 100) & Array1e2(0) & CNT2(Right(cijfer, 2))
    Else
        CNT3 = CNT2(Right(cijfer, 2))
    End If
End Function

Private Function CNT6(ByVal cijfer As Long) As String
    CNT6 = CNT3(cijfer \ 1000) & Array1e3(0) & CNT3(Right(cijfer, 3))
End Function

Private Function CNT9(ByVal cijfer As Long) As String
    CNT9 = CNT3(cijfer \ 1000000) & Array1e6(0) & CNT6(Right(cijfer, 6))
End Function

Private Function CNT12(ByVal cijfer As Long) As String
    CNT12 = CNT3(cijfer \ 1000000000) & Array1e9(0) & CNT9(Right(cijfer, 9))
End Function
 
Laatst bewerkt:
Omdat niemand reageert heb ik zelf maar twee aanpassingen gemaakt :(
  • "een" wordt als "één" weergegeven
  • "eenhonderd" en "eenduizend" worden als resp. "honderd" en "duizend" weergegeven

De code is wederom bijgevoegd.
 

Bijlagen

LOL, nou ben ik wat sneller klaar, alleen speel ik nu vals:p
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan