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...
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: