• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Valuta van getal in cijfers omzetten naar tekst

Status
Niet open voor verdere reacties.

StevenAlla

Gebruiker
Lid geworden
11 dec 2013
Berichten
10
Bestaat er een formule die een valuta (bijvoorbeeld: € 13,20) automatisch kan omzetten naar voluit geschreven tekst (zoals: Dertien Euro en twintig cent)

ik moet namelijk vele honderden bedragen in cijfers omzetten in tekst en zou dit graag snel willen oplossen door middel van een formule die dat in Excel voor mij eenvoudig oplost maar heb geen flauw benul van hoe ik daar zelf moet aan beginnen, ikzelf ben een amateur op gebied van Excel.
de bedragen liggen tussen € 00,00 en € 9.999,99 en zijn steeds en altijd in Euro dus ik hoef geen opties te hebben in andere valuta tenzij dit voor u helemaal niet moeilijk blijkt te zijn om de bedragen oneidig en met eender welke valuta lukt.

Hopelijk zijn er hier Excel-goeroe's die deze vraag als een uitdaging willen aangaan ;-)

Alvast heel veel dank
 
Excel heeft daar bij mijn weten geen functie(s) voor, maar er zijn wel eigen functies die dat voor je regelen. In Word heb je er overigen wél een opmaak voor, dus wellicht kun je daar al mee uit de voeten.
 
Laatst bewerkt:
Met dank aan KeepItCool kan je dit in een module zetten en testen: (het werkt wel hé)
Code:
Dim eh$(99)
Dim vv$(12)
'auteur: KeepItCool
Function getaltekst(getal As Variant) As String
  Dim heel, deel    'decimal variants
  Dim txt$, n%      'string/int
  vulArrays
  heel = Int(CDec(Abs(getal)))
  deel = CDec(Abs(getal)) - heel

  txt = IIf(Sgn(getal) < 0, "min ", "") & _
    IIf(heel = 0, IIf(deel = 0, "nul", ""), spel(heel))

  If deel <> 0 Then
    txt = txt & IIf(heel = 0, "", " en ")
    n = Len(Mid(deel, 3))
    'boven miljoenste per macht van 3
    n = n + IIf(n < 6, 0, (3 - n Mod 3) Mod 3)
    deel = deel * (10 ^ n)
    txt = txt & spel(deel) & " " & _
      Trim(Replace(spel(10 ^ n), "een", "")) & _
      IIf(n = 1, "de", "ste")
  End If

  getaltekst = txt
End Function



Function spel$(n)
  Dim t$, tmp$, b$, b1$, b2$
  Dim i%, s%, hv%, dv%

  t = CStr(n)
  'blokje van 4 bij getal tm 9999
  s = IIf(Len(t) = 4, 4, 3)
  'met nullen vullen tot lengte een veelvoud is van 3
  t = String((s - Len(t) Mod s) Mod s, "0") & t

  For i = 1 To Len(t) Step s
    tmp = Mid(t, i, s)
    b1 = Left(tmp, Len(tmp) - 2)
    hv = IIf(Right(b1, 1) = 0, 3, 2)    'duizend/honderd
    b1 = IIf(Right(b1, 1) = 0, Left(b1, 1), b1) 'idem

    b1 = xx(b1)
    b1 = IIf(b1 = "een", " ", b1)       'geen eenhonderd
    b1 = b1 & IIf(b1 = "", "", vv(hv))  'plak veelvoud

    b2 = Right(tmp, 2)
    dv = Len(t) - i - (s - 1)           'duizendvoud
    b2 = xx(b2)

    'spatiëring
    'optioneel EN voor getal tm 12
    b2 = IIf(dv = 0 And b1 <> "" And _
      Right(tmp, 2) > 0 And Right(tmp, 2) <= 12, _
      "en " & b2, b2)
    b = Trim(b1 & " " & b2) & " "
    'geen spatie veelvoud duizend hfdtelwoord tm honderd
    If (dv = 3 And Right(tmp, 2) = "00") Then b = Trim(b)
    'geen spatie veelvoud honderd
    If (dv = 3 And tmp < 100) Then b = Trim(b)

    spel = Trim(spel & " " & b & IIf(tmp = "000", "", vv(dv)))
  Next
End Function

Private Function xx$(n$)
'spelt tm 99
  If eh(n) <> "" Then
    xx = eh(n)
  Else
    xx = eh(Right(n, 1)) & _
      IIf(Left(n, 1) = 1 Or Right(n, 1) = 0, "", _
        IIf(Right(xx, 1) = "e", "ën", "en")) & _
      IIf(eh(Left(n, 1) * 10) <> "", eh(Left(n, 1) * 10), _
        eh(Left(n, 1)) & vv(1))
  End If
  xx = Trim(xx)
End Function

Private Sub vulArrays()
  eh(0) = " "
  eh(1) = "een"
  eh(2) = "twee"
  eh(3) = "drie"
  eh(4) = "vier"
  eh(5) = "vijf"
  eh(6) = "zes"
  eh(7) = "zeven"
  eh(8) = "acht"
  eh(9) = "negen"
  eh(10) = "tien"
  eh(11) = "elf"
  eh(12) = "twaalf"
  eh(13) = "dertien"
  eh(14) = "veertien"
  eh(20) = "twintig"
  eh(30) = "dertig"
  eh(40) = "veertig"
  eh(80) = "tachtig"
  vv(1) = "tig"
  vv(2) = "honderd"
  vv(3) = "duizend"
  vv(6) = "miljoen"
  vv(9) = "miljard"
  vv(12) = "biljoen"
End Sub

Function GetalEuro(getal As Variant) As String
  Dim heel, deel    'decimal variants
  Dim txt$, n%      'string/int
  vulArrays
  heel = Int(CDec(Abs(getal)))
  deel = Round(CDec(Abs(getal)) - heel, 2)
  txt = IIf(Sgn(getal) < 0, "min ", "") & _
    IIf(heel = 0, IIf(deel = 0, "nul", ""), spel(heel))
  If heel > 0 Then txt = txt & IIf(deel = 0, " euro", " euro en ")
  If deel <> 0 Then
    deel = Int(Abs(deel * 100))
    txt = txt & spel(deel) & " cent"
  End If
  GetalEuro = txt
End Function
 
Is Dhr./Mevr. KeepItCool de auteur? De oorspronkelijke bron kon ik eigenlijk nergens achterhalen...

En inderdaad: het werkt goed.
 
Bedankt

Bedankt voor de oplossingen, het doet wat het moet doen
alleen jammer dat zo'n functie niet standaard in Excel aanwezig zit en je zelf op zoek moet naar een mogelijkheid.

Special thanks to Dhr./Mevr. KeepItCool
 
Laatst bewerkt:
Is Dhr./Mevr. KeepItCool de auteur? De oorspronkelijke bron kon ik eigenlijk nergens achterhalen...

Waarom twijfel je daar aan?
KeepItCool is/was een krak !!! - - ('is/was' = hoor er niets meer van.)
 
Heb geen redenen om aan jouw bewering te twijfelen, dus geloof het meteen.

Die code heb ik al heel lang op de PC staan, en zoals gezegd weet ik niet meer waar het vandaan komt. Gelukkig maar, want het is tegenwoordig lastig te vinden op internet heb ik gemerkt.

Mocht dhr. KeepItCool dit nog lezen: mijn complimenten :d
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan