Menu Sluiten

Getal In Woorden

Getal in woorden VBA

VBA in Excel biedt eindeloze mogelijkheden voor maatwerk en automatisering. Een van de verzoeken die Excel-gebruikers soms hebben, is de mogelijkheid om getallen om te zetten naar hun woordelijke representatie. Dit is vooral nuttig in boekhoudtoepassingen, contractgeneratoren, en bij het maken van cheques of facturen. Vandaag gaan we precies dat doen en leren hoe je getallen tot tien miljoen kunt omzetten naar woorden in het Nederlands!

Waarom is dit nuttig?

Het kunnen converteren van getallen naar woorden kan nuttig zijn in diverse scenario’s:

  • Financiële rapporten: Het opstellen van officiële financiële documenten.
  • Onderwijs: Het maken van onderwijsmaterialen of quizzen die studenten vragen getallen in woorden te schrijven.
  • Formele communicatie: Denk aan het opstellen van contracten of officiële documenten.

De Functie: GetalInWoorden

Om aan de slag te gaan, introduceren we eerst een hoofdfunctie genaamd ‘GetalInWoorden’ die verantwoordelijk is voor het identificeren en verwerken van miljoenen, duizenden en de resterende getallen.

De bijbehorende hulpfunctie, ‘GetalNaarHonderden’, hanteert de logica voor getallen tot 999. Hiermee voorkomen we herhaling van code en maken we ons script efficiënter.

Function GetalInWoorden(getal As Long) As String
    Dim Eenheden As Variant
    Dim Tientallen As Variant
    Dim Duizendtallen As String
    Dim Miljoentallen As String

    ' Speciale case nul
    If getal = 0 Then
        GetalInWoorden = "nul"
        Exit Function
    End If

    ' Array met eenheden
    Eenheden = Array("", "een", "twee", "drie", "vier", "vijf", "zes", "zeven", "acht", "negen")
    ' Array met tientallen
    Tientallen = Array("", "", "twintig", "dertig", "veertig", "vijftig", "zestig", "zeventig", "tachtig", "negentig")

    ' Controleer miljoentallen
    If getal >= 1000000 Then
        Dim m As Long
        m = getal \ 1000000
        If m = 1 Then
            Miljoentallen = "een miljoen "
        Else
            Miljoentallen = GetalNaarHonderden(m) & " miljoen "
        End If
        getal = getal Mod 1000000
    End If

    ' Controleer duizendtallen
    If getal >= 1000 Then
        Dim t As Long
        t = getal \ 1000
        If t = 1 Then
            Duizendtallen = "duizend "
        Else
            Duizendtallen = GetalNaarHonderden(t) & "duizend "
        End If
        getal = getal Mod 1000
    End If

    ' Combineer en trim overtollige spaties
    GetalInWoorden = Trim(Miljoentallen & Duizendtallen & GetalNaarHonderden(getal))
End Function

Function GetalNaarHonderden(num As Long) As String
    Dim Eenheden As Variant
    Dim Tientallen As Variant
    Dim res As String

    Eenheden = Array("", "een", "twee", "drie", "vier", "vijf", "zes", "zeven", "acht", "negen")
    Tientallen = Array("", "", "twintig", "dertig", "veertig", "vijftig", "zestig", "zeventig", "tachtig", "negentig")

    If num = 0 Then
        GetalNaarHonderden = ""
        Exit Function
    End If

    ' Honderdtallen: bij 1 -> "honderd" (niet "eenhonderd")
    If num >= 100 Then
        Dim h As Long
        h = num \ 100
        If h = 1 Then
            res = "honderd"
        Else
            res = Eenheden(h) & "honderd"
        End If
        num = num Mod 100
    End If

    If num = 0 Then
        GetalNaarHonderden = res
        Exit Function
    End If

    ' Speciale gevallen: 10 en 11-19
    If num = 10 Then
        res = res & "tien"
    ElseIf num > 10 And num < 20 Then
        Select Case num
            Case 11: res = res & "elf"
            Case 12: res = res & "twaalf"
            Case 13: res = res & "dertien"
            Case 14: res = res & "veertien"
            Case 15: res = res & "vijftien"
            Case 16: res = res & "zestien"
            Case 17: res = res & "zeventien"
            Case 18: res = res & "achttien"
            Case 19: res = res & "negentien"
        End Select
    ElseIf num >= 20 Then
        Dim u As Long
        u = num Mod 10
        If u <> 0 Then
            ' bv. 21 -> een + en + twintig -> "eenentwintig"
            res = res & Eenheden(u) & "en"
        End If
        res = res & Tientallen(num \ 10)
    Else
        ' 1-9
        res = res & Eenheden(num)
    End If

    GetalNaarHonderden = res
End Function

Heeft dit artikel je geholpen?

3 reacties

  1. Angel

    Werkt echt top!

    Hij pakt alleen de 10.000 niet, dan komt er #WAARDE! te staan, dat is met alle getallen die 10.000 er in hebben, 910.000 bijvoorbeeld ook.

    en bij de 100.000 zegt hij eenhonderdduizend.

    Heb je een oplossing voor beide situaties?

      • Angel

        Hey Martin!

        Wij werken erg veel met het zeggen van een valuta, wat ik ook nog uitvond was dat de zeggen van 100.000 werd éénhonderdduizend, ik heb hem zelf aangepast werkend naar mijn eigen wijze en het werkt echt top! (als je graag mijn code wilt zien kan ik hem naar je sturen)

        Mvg,

        Angel

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *