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

getal naar tekst! help aub

Status
Niet open voor verdere reacties.

nickfysiek

Gebruiker
Lid geworden
27 jan 2010
Berichten
12
Beste,

Ik heb ee code van hier op het forum licht aangepast.
Zodat ik nu vb: ik tik in 50, 26 en dat geeft mij netjes vijftig euro zesentwintig cent

probleem 1: nu, als ik 50 intik geeft hij gewoon vijftig en niet euro
probleem 2: getallen in de duizend geven problemen 4580,6 geeft mijn vijfenveertighonderd in plaats van vierduizend honderd.

Ik moet morgen 20 pagina's met getallen omzetten en zie er echt tegenop dit handmatig te doen, hulp zou fantastisch zijn!

ik heb onderstaande file nog s bijgevoegd;

Het enige wat ik gedaan heb is de 'en' vervangen door 'euro' en na de comma zegt hij cent

Bekijk bijlage Getallentekst.xls
 
Je eerste probleem kun je in de formule oplossen, zie bijlage.
 

Bijlagen

  • Getallentekst(1).xls
    35,5 KB · Weergaven: 65
VBA code van Keepitcool

Code:
'auteur: KeepItCool

Option Explicit
Option Compare Text

Dim eh$(99)
Dim vv$(12)

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 = CDec(Abs(getal)) - heel
  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 = Abs(deel * 100)
    txt = txt & spel(deel) & " cent"
  End If
  GetalEuro = txt
End Function
 
hoe

kan pas tegen de avond kijken naar de formule, wat is net aangepast in de laatste versie?
 
terug

wher! bedankt voor je tip!

raymond, ik zag geen oplossing in jou code, dit was enkel de originele code die tienden enzo gaf
4560 geeft nog steeds vijfenveertighonderd ipv vierduizend vijfhonderdzestig

ik heb in bijlage een foto gestoken van het probleem

'k hoop echt dat dat zou kunnen worden opgelost!

alvast bedankt voor jullie moeite.probleem getaltekst.jpg
 
probleem 2: getallen in de duizend geven problemen 4580,6 geeft mijn vijfenveertighonderd in plaats van vierduizend honderd.

'Vierduizend honderd'???? Da's toch geen Nederlands!!! De geboden tekstuele omschrijving is dus gewoon goed.

Groet, Leo
 
4630 wordt toch vierduizend zeshonderddertig euro en niet zesenveertighonderd dertig euro

dat is net het probleem

je zegt toch vierduizend en niet veertig honderd
 
Als ik de regels goed interpreteer is het als volgt:

4000 vierduizend
4100 eenenveertighonderd
4130 vierduizend honderddertig
4600 zesenveertighonderd
4630 vierduizend zeshonderddertig
 
Hmmmm.... Jullie zullen ongetwijfeld gelijk hebben (zeker met die site van Popipipo) en is mijn gevoel van die zesenveertighonderd en nog wat euro waarschijnlijk spreektaal. Bij de witgoed handel staan en een wasmachine kopen van € 2250,00 zou ik zeggen dat die dus tweeëntwintighonderdvijftig euro kost ipv tweeduizend tweehonderdvijftig euro...
Ik merk nu wel dat mijn regel niet consequent is. Boven de tienduizend spreek je het wel weer 'apart' uit (dus eerst de duizendtallen en dan de rest).

Grappig, zo'n niet geheel on topic stukje discussie.

Groet, Leo
 
Als ik de regels goed interpreteer is het als volgt:

4000 vierduizend
4100 eenenveertighonderd
4130 vierduizend honderddertig
4600 zesenveertighonderd
4630 vierduizend zeshonderddertig
O ja.... Ga je lekker???? :D
Dacht ik het nét door te hebben... :D:D:D

Groet, Leo
 
zesenveertighonderd en nog wat euro waarschijnlijk spreektaal.
Hier ben ik het volkomen mee eens maar spreektaal en schrijftaal willen nog wel een verschillen.
En dan wordt het heel persoonlijk of je die twee altijd mag gelijk stellen.
In dit geval zou ik zeggen: ja

In een ander geval zou ik weer nee zeggen:
Spreektaal: 'Ik wou wat zeggen'
Schrijftaal: 'Ik wilde wat zeggen'

Geen wonder dan buitenlanders Nederlands zo moeilijk en inconsequent vinden.
 
Mijn Nederlands is beter dan mijn VBA :p

Ik kan je dus helaas niet helpen. :(
 
De dag is al voorbij... Heb je 't toch nog nodig?

Met een minieme aanpassing is je probleem opgelost. Zoek ff deze functie in de code van KeepITcool...
Code:
Function spel$(n)
  Dim t$, tmp$, b$, b1$, b2$
  Dim i%, s%, hv%, dv%

  t = CStr(n)
  'blokje van 4 bij getal tm 9999
  [COLOR="blue"][B]s = 3 'IIf(Len(t) = 4, 4, 3)[/B][/COLOR]
  'met nullen vullen tot lengte een veelvoud is van 3
  t = String((s - Len(t) Mod s) Mod s, "0") & t
...en pas daar de blauwe regel aan zoals hierboven. Vanaf dan zal je gewenste spelling gevolgd worden.

Groet, Leo
 
Laatst bewerkt door een moderator:
super!

doch, ik heb nog een probleem ontdekt

17,10 schrijft hij als zeventien euro en 1 cent, terwijl het moet zijn zeventien euro en 10 cent....

volgens mij zullen veel geholpen zijn met een voll afgewerkte code, want volgens mij is deze nergens te vinden op het net, voor het nederlands dan toch
 
17,10 schrijft hij als zeventien euro en 1 cent, terwijl het moet zijn zeventien euro en 10 cent....

Ehhhhh.... ik weet niet welke code jij gebruikt en/of wat je er eventueel in hebt aangepast, maar de code van KeepItCool doet gewoon wat die moet doen...
Code:
  A              B                           
1         17,10  zeventien euro en tien cent 

Sheet1

[Table-It] version 09 by Erik Van Geit
Code:
RANGE FORMULA 
B1    =getaleuro(A1)

[Table-It] version 09 by Erik Van Geit

Groet, Leo
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan