Of moet het in cijfers blijven staan, maat als tekst geīnterpreteerd?
Voor het eerste heeft Ingrid een tijdje geleden een mooie Add-In gemaakt.
Luc
"H.C.M. Raaijmaakers" <be...@cuci.nl> schreef in bericht
news:3d862674$0$87559$8fcf...@news.wanadoo.nl...
Vermoedelijk kan je ook dit in een macro zetten. Alleen zal die dan wel een
stuk groter worden als die die Ingrid gemaakt heeft. Je moet hem immers het
aantal cijfers laten tellen voor de komma, en afhankelijk daarvan bepalen
hoe het getal moet uitgesproken worden (Tientallen; honderdtallen;
duizendtallen; milioen; miljard; triljoen; triljard enz.) Verder heb je nog
de uitzonderingen (elf; twaalf; dertien; veertien). Je hebt dan ook nog de
onlogische volgorde waarin de getallen worden uitgesproken
(Honderddrieentwintig, waarin de hondertallen vooraan, en de tientallen
achteraan).
Een leuk werkje voor iemand die zich toevallig verveelt...
Ik vermoed dat je hier geen oplossing voor gaat krijgen.
Luc
Marc
"Luc Heyndrickx" <lucNOSPAMAU...@skynet.be> schreef in bericht
news:3d8638a7$0$203$ba62...@news.skynet.be...
>
> "H.C.M. Raaijmaakers" <be...@cuci.nl> schreef in bericht
> news:3d863540$0$87551$8fcf...@news.wanadoo.nl...
> >
> > "Luc Heyndrickx" <lucNOSPAMAU...@skynet.be> schreef in bericht
> > news:3d862e5d$0$208$ba62...@news.skynet.be...
> > > Wat bedoel je?
> > > Moet een getal van cijfers omgezet worden naar letters?
> > > bv
> > > 123
> > > één-twee-drie
> > >
> > > Of moet het in cijfers blijven staan, maat als tekst geïnterpreteerd?
--
Met vriendelijke groeten,
Ber Visser
"H.C.M. Raaijmaakers" <be...@cuci.nl> schreef in bericht
news:3d862674$0$87559$8fcf...@news.wanadoo.nl...
Greetz,
KeepItCool
<unscramble emailaddress with ROT13>
"H.C.M. Raaijmaakers" <be...@cuci.nl> wrote in message
news:3d862674$0$87559$8fcf...@news.wanadoo.nl ...
> Kan ik in excel getallen laten omzetten naar tekst?
> Wie weet hier een voorbeeld van te vinden als het gaat?
>
>
Dim spel$(99)
Dim den(6)
Dim tal(12)
Function t2s(value As Variant) As String
Dim val As Variant
Dim valH$, valD$
Dim strC$, strD$, strH$, tmp$
Dim strT$, strS$
Dim i%
Dim decpos&
val = CDec(value)
loadspel
strT = IIf(Sgn(val) > 0, "", "min ")
val = Abs(val)
valH = Int(val)
With Application
decpos = Len(CStr(val)) - InStrRev(CStr(val), _
IIf(.UseSystemSeparators, .International(xlDecimalSeparator), _
.DecimalSeparator))
End With
valD = Int((val - Int(val)) * (10 ^ decpos))
If valH <> "0" Then
i = 0
Do
tmp = Right(valH, 3)
valH = Left(valH, Len(valH) - IIf(Len(valH) < 3, Len(valH), 3))
strH = blokvandrie(tmp) & tal(i * 3) & strH
i = i + 1
Loop Until valH = ""
Else
strH = "nul"
End If
If valD <> "0" Then
If decpos <= 6 Then
strD = " " & den(decpos)
End If
i = 0
Do
tmp = Right(valD, 3)
valD = Left(valD, Len(valD) - IIf(Len(valD) < 3, Len(valD), 3))
strD = blokvandrie(tmp) & tal(i * 3) & strD
i = i + 1
Loop Until vD = ""
strD = " en " & strD
Else
strD = ""
End If
Let strC = strT & strH & strD
cleanup:
Let strC = Replace(strC, "eenhonderd", "honderd", 1, , vbTextCompare)
Let strC = Replace(strC, "achttig", "tachtig", 1, , vbTextCompare)
Let strC = Replace(strC, "eee", "eeë", 1, , vbTextCompare)
Let strC = Replace(strC, "drieen", "drieën", 1, , vbTextCompare)
t2s = strC
End Function
Private Function blokvandrie(tmp) As String
Dim res$
If CInt(tmp) > 99 Then
res = spel(CInt(Left(tmp, 1))) & tal(2)
tmp = Right(tmp, 2)
End If
If CInt(tmp) <= 50 Then
If spel(CInt(tmp)) <> "" Then
res = res & spel(CInt(tmp))
ElseIf CInt(tmp) > 10 Then
res = res & spel(Right(tmp, 1)) & "en" & spel(Left(tmp, 1) * 10)
Else
res = res & spel(CInt(tmp))
End If
Else
res = res & spel(CInt(Right(tmp, 1))) & "en" & _
spel(CInt(Left(tmp, 1))) & tal(1)
End If
blokvandrie = res
End Function
Private Sub loadspel()
spel(0) = ""
spel(1) = "een"
spel(2) = "twee"
spel(3) = "drie"
spel(4) = "vier"
spel(5) = "vijf"
spel(6) = "zes"
spel(7) = "zeven"
spel(8) = "acht"
spel(9) = "negen"
spel(10) = "tien"
spel(11) = "elf"
spel(12) = "twaalf"
spel(13) = "dertien"
spel(14) = "veertien"
spel(20) = "twintig"
spel(30) = "dertig"
spel(40) = "veertig"
tal(1) = "tig"
tal(2) = "honderd"
tal(3) = "duizend"
tal(6) = "miljoen"
tal(9) = "miljard"
tal(12) = "biljoen"
den(1) = "tiende"
den(2) = "honderste"
den(3) = "duizendste"
den(4) = "tienduizendste"
den(5) = "honderdduizendste"
den(6) = "miljoenste"
End Sub
Ik ben eigenlijk ook wel geïnteresseert in uw macro.
Ik had niet gedacht dat hier een antwoord op zou komen ... zo zie je maar,
ik ben te snel geweest.
Bij een antwoord via E-Mail, gelieve NOSPAMAUB er uit te halen.
Luc
"Ber Visser" <viss...@pandora.be> schreef in bericht
news:ehK9ctcXCHA.2656@tkmsftngp10...
Ik heb jou functie proberen aan te passen volgens de spellingsregels, maar
het blijkt fout te lopen bij getallen >1000 waarbij het honderdtal 0 is.
bijv 1015 geeft "duizend vijfen"
Weet jij hier soms een oplossing voor?
De functie, zoals ik ze nu heb, staat op:
http://users.pandora.be/ingrid/excel/telwoorden.htm
Ingrid
keepitcool schreef:
'eenhonderdtwaalf euro en tweeendertig eurocent'
Is het mijn Antwerps dialect?
Ik zou dit uitspreken als:
'honderdentwaalf euro en tweeendertig eurocent'
Vermoed dat Ber een meer officiële schrijfwijze gebruikt?
Met groetjes en respect (vraagje niet cynisch bedoeld).
Eric
"Luc Heyndrickx" <lucNOSPAMAU...@skynet.be> schreef in bericht
news:3d86d62a$0$214$ba62...@news.skynet.be...
Ingrid
Eric Desart schreef:
Luc
"Ingrid" <ingrid_bap...@hotmail.com> schreef in bericht
news:#Sl04biXCHA.464@tkmsftngp12...
Private Function blokvandrie(tmp) As String
Dim res$
If CInt(tmp) > 99 Then
res = spel(Left(tmp, 1)) & tal(2)
tmp = Right(tmp, 2)
End If
If spel(tmp) <> "" Then
res = res & spel(tmp)
ElseIf tmp < 50 Then
amp = IIf(tmp < 20, "", "en")
res = res & spel(Right(tmp, 1)) & amp & _
spel(Left(tmp, 1) * 10)
Else
amp = IIf(tmp Mod 10 = 0, "", "en")
res = res & spel(Right(tmp, 1)) & amp & _
spel(Left(tmp, 1)) & tal(1)
End If
blokvandrie = res
End Function
Greetz,
KeepItCool
<unscramble emailaddress with ROT13>
"Ingrid" <ingrid_bap...@hotmail.com> wrote in message
news:e14J#0hXCHA.4200@tkmsftngp08 ...
Ingrid
keepitcool schreef:
>>> vbTextCompare) Let strC = Replace(strC, "eee", "eeė", 1, ,
>>> vbTextCompare) Let strC = Replace(strC, "drieen", "drieėn", 1, ,
Zelfde probleem als jij,
Nuttig de link van Ingrid.
Weet ik tenminste hoe het nu juist zit.
Groetjes
Eric
PS. Mijn stomme vraag heeft jou misschien weeral werk bezorgt.
"Ber Visser" <viss...@pandora.be> schreef in bericht
news:OCpkisjXCHA.2656@tkmsftngp10...
| Eric, ik heb de schrijfwijze aangehouden zoals die vroeger op
| officiële documenten (contracten, kwitanties e.d.) gebruikelijk
| was. Gezien de link die Ingrid opgaf loop ik, met het klimmen der
| jaren, waarschijnlijk een beetje achter ;-(
|
| --
| Met vriendelijke groeten,
| Ber Visser
|
| "Eric Desart" <afb...@belgacom.net> schreef in bericht
| news:uH1e#ViXCHA.2452@tkmsftngp09...
--
Met vriendelijke groeten,
Ber Visser
"Eric Desart" <afb...@belgacom.net> schreef in bericht
news:uH1e#ViXCHA.2452@tkmsftngp09...
ik ben ermee aan t werk. morgen post ik m wel.
en dan volledig inclusief spaties e.d.
tot die tijd svp je pagina "Getallen volluit schrijven" sic!
ff verwijderen.
Greetz,
KeepItCool
<unscramble emailaddress with ROT13>
"Ingrid" <ingrid_bap...@hotmail.com> wrote in message
news:u$Cls2iXCHA.2456@tkmsftngp09 ...
Hieronder mijn functie voor het omzetten van getallen naar tekst. Deze werkt
voor positieve en negatieve getallen tot 999 999 999. Decimale getallen gaat
niet. Voor geldbedragen kun je altijd het geheel deel nemen en omzetten naar
tekst en vervolgens het decimaal deel * 100 en dit weer omzetten naar tekst
voor de eurocenten.
mvg
Marc
Option Base 0
Public eenheid, tiental As Variant
Sub declareer()
eenheid = Array("", "een", "twee", "drie", "vier", "vijf", "zes", "zeven",
"acht", "negen", "tien", "elf", "twaalf", "dertien", "veertien", "vijftien",
"zestien", "zeventien", "achttien", "negentien")
tiental = Array("", "tien", "twintig", "dertig", "veertig", "vijftig",
"zestig", "zeventig", "tachtig", "negentig")
End Sub
Function getal(u_get) As String
Dim milj As Integer, eenh As Integer, d As Integer
Dim Chr, mtekst, dtekst, ehtekst As String
u_get = CLng(u_get)
declareer
Chr = ""
Select Case u_get
Case Is = 0
getal = "nul"
Exit Function
Case Is < -999999999
getal = "Buiten bereik"
Exit Function
Case Is < 0
Chr = "min "
u_get = Abs(u_get)
Case Is > 999999999
getal = "Buiten bereik"
Exit Function
End Select
milj = Right(Fix(u_get / 1000000), 3)
d = Right(Fix(u_get / 1000), 3)
eenh = Right(u_get, 3)
If milj > 0 Then
mtekst = totd(milj) & " miljoen "
End If
Select Case d
Case Is = 1
dtekst = "duizend "
Case Is > 1
dtekst = totd(d) & "duizend "
End Select
getal = Chr & mtekst & dtekst & totd(eenh)
End Function
Private Function totd(teller As Integer) As String
Dim e, t, h As Integer
h = Fix(teller / 100)
t = Fix(teller / 10 - h * 10)
e = teller - t * 10 - h * 100
Select Case h
Case Is = 1
totd = "honderd "
Case Is > 1
totd = eenheid(h) & "honderd "
End Select
If t * 10 + e < 20 Then
totd = totd & eenheid(t * 10 + e)
Else
If e = 0 Then
totd = totd & tiental(t)
Else
If Right(eenheid(e), 1) = "e" Then
totd = totd & eenheid(e) & "-en" & tiental(t)
Else
totd = totd & eenheid(e) & "en" & tiental(t)
End If
End If
End If
End Function
vlgs mij is ie nu helemaal foutloos en compleet conform
http://www.taalunieversum.org/taaladvies/generiek.php?id=44
de functie werkt met 12 cijfers voor EN 12 cijfers na de komma,
spelt 1200 als twaalfhonderd ipv duizend tweehonderd en alles is waar
mogelijk samengesteld ahv unieke componenten.
hij doet in ieder geval alle voorbeelden van bovengenoemde link
foutloos.....
Greetz,
KeepItCool
<unscramble emailaddress with ROT13>
"H.C.M. Raaijmaakers" <be...@cuci.nl> wrote in message
news:3d862674$0$87559$8fcf...@news.wanadoo.nl ...
> Kan ik in excel getallen laten omzetten naar tekst?
> Wie weet hier een voorbeeld van te vinden als het gaat?
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