• 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

Status
Niet open voor verdere reacties.

Nikki Russel

Gebruiker
Lid geworden
30 mrt 2008
Berichten
63
Beste forumleden,

Heb een (Engelse) Makro gevonden en geprobeerd aan te passen
het gaat goed tot 20 cent achter de komma, bij 21 cent komt er
twintig negen cent te staan ipv negen en twintig cent.

Wij wil mij hiermee helpen dat de telling goed komt, zie bijlage
 

Bijlagen

  • Voorbeeld Bedrag naar Tekst 2.xls
    34,5 KB · Weergaven: 71
ow lekker code fouten in de oplossingen van MS office zelf.. en dat is niet de enige fout. :mad:

sorry Nikki, ik hoopte met de link een eenvoudige oplossing te hebben voor je..
 
Verander MyGetal in MijnGetal bij de blauwe selectie....
 
reactie

Heb MyGetal veranderd in MijnGetal,
krijg de volgende foutmelding: Centen = GetTens(Left(Mid(MijnGetal, AantalDecimalen + 1) & _ "00", 2))
 
Dat heb ik ook ondervonden Nikki, het staat vol met fouten in een snelle scan zag ik al snel een stuk of 5 van die rode regeltjes in mijn VB editor.
Onbegrijpelijk dat Microsoft dit zo online heeft staan.. Het zou een mooie aanvulling kunnen zijn op de standaard functies van excel, maar nu levert het vooral ergenis op omdat je hoopt een oplossing te hebben en dan met een hoop fouten opgescheept te worden..

Vandaar dat ik mij heb beperkt tot het zeggen van sorry dat de link vrij nutteloos bleek..

Maar misschien dat iemand hier er brood in ziet de code te debuggen.. :)
 
Laatst bewerkt:
reactie

In ieder geval bedankt voor de Moeite,
Ik had de Engelse versie al gedeeltelijk aangepast, alleen
bij de centen van af 21 is dit twenty one dus verkeerd om
als het niet lukt zou ik dit nog kunnen proberen om te draaien.

M.vr.gr. Nikki
 
aanvulling

Zo heb ik ook de gehele Engelse versie door de Translater gehaald
werkte ook niet, helaas!
 
@Gijs

een kwestie van een spatie:

Code:
Function vertaal(y)
  c00 = Format(Val(1 * y), String(3 * ((Len(Format(Val(1 * y))) - 1) \ 3 + 1), "0"))

  For j = 1 To Len(c00) \ 3
    x = Mid(c00, 3 * (j - 1) + 1, 3)

    sp = Array(mats(Left(x, 1)), mats(Val(Right(x, 2))), mats(Right(x, 1)), mats(Mid(x, 2, 1) & "0"), mats(Mid(x, 2, 1)))
    c01 = c01 & IIf(sp(0) = "", "", sp(0) & "honderd") & IIf(Right(x, 2) = "00", "", IIf(sp(1) <> "", sp(1), sp(2) & IIf(Mid(x, 2, 1) = "1", sp(3), "en" & IIf(sp(3) = "", sp(4) & "tig", sp(3))))) & Choose(Len(c00) \ 3 - j + 1, "", "duizend ", " miljoen ", " miljard ")
  Next

  vertaal = IIf(c01 = "", "nul", Trim(Replace(Replace(Replace(Replace(" " & c01, " eendu", "du"), " eenho", "ho"), "eee", "eeë"), "rieen", "rieën")))
End Function

De bijlage van de website werkte al correct.
De tekst van de webpagina aangepast.
 
Laatst bewerkt:
Je laat wel bijzonder weinig inspanningen zien. In het linkje dat je van @roeljongman in #2 hebt gekregen staan vier vrij simpel op te lossen foutjes. 1 x een verkeerd benoemde variabele, 1 x een , wat een . had moeten zijn en 2 x een verkeerd afbreekstreepje. In de gebruikte functies kan je de opbouw van Result aanpassen. Dit heb ik nu een beetje half gedaan maar moet voldoende zijn. Eventuele spaties of andere tussenvoegsels mag je zelf doen.
 

Bijlagen

  • Getal naar tekst MS.xlsm
    18,5 KB · Weergaven: 53
@VenA stiekem was ik op de achtergrond bezig die code te "debuggen" wat niet heel moeilijk was zoals jij ook aangeeft. Ik was wel geïrriteerd dat Microsoft code met dit soort fouten online heeft staan en dat als het eenmaal werkt de tekst nog steeds niet volgens de NL schrijfwijze is. Maar ja uit irritatie kan ook uitdaging ontstaan en dus heb ik de code aangepast zodat het (hopelijk) nu wel klopt en bruikbaar is in NL context

Ik heb ook de code van snb bekeken, maar zoals zo vaak bij zijn codes het leest als Shakespeare, je weet dat het een meesterwerkje is maar voor de "gewone (vba) man (of vrouw)" bijna niet doorheen te komen :confused:
Het gaf me wel wat ideeën voor de trema en tussenwoordjes problematiek in de NL spelling.

volgens mij ben ik er wel uit.
ik heb ook nog de mogelijkheid toegevoegd om wel of geen centen te vermelden achter een (rond) bedrag
 

Bijlagen

  • Schrijf getal in woorden NL.xlsm
    25,8 KB · Weergaven: 73
Laatst bewerkt:
Reactie Excel

Sorry,

Helaas ben ik hier niet goed in, de oplossing in 'Getal naar tekst MS.xlsm'
spreekt mij het meeste aan omdat ik deze module in diverse bladen kan kopieëren
en alleen ter plekke waar de tekst moet komen te staan =schrijftekst(A3).
maar als ik bv. 12.753,83 invul krijg ik Twaalf Duizend Vijfhonderd DrieZeventig euro en DrieTachtig cent te zien.
Tussen DrieZeventig en DrieTachtig zou nog en moeten komen te staan.

Vind het verveld dat ik zoveel tijd hiervoor in beslag neem, echter niet zo heel goed in deze materie.

m.vr.gr. Nikki
 
@nikki, had je mijn laatste reactie gezien, direct voor die van jou? dat doet precies wat je nodig hebt
Ik heb de code uit de Microsoft link gepakt en deze helemaal taalkundig aangepast zodat ze volgens de NL spelling kloppen. (op misschien een verdwaalde spelfout na)
het is gewoon een module die je in excelbestanden van jou keuze kan invoegen.
 
Reactie Excel

Geachte heer roeljongman,


Heb het zo gedaan als u de Engelse versie door de vertaler gedaan voor Excel 2003
De Nederlandse versie opgeslagen en in Excel gezet, maar krijg dan helaas foutmeldingen.
 
Gebruik je excel 2003? en kun je dus mijn bijlage uit post #16 niet openen?

Daarin staat namelijk een volledig werkende nl versie van =schrijfgetal
maar wel gemaakt in een hogere versie dan 2003.

EDit wellicht helpt het als ik de hele code hier plaats en dan kun je dat in 2003 in een module kopieren.

Code:
Option Explicit

Function SchrijfGetal(ByVal MijnGetal, Optional MetCenten As Boolean)
'Hoofdfunctie

Dim Euros, Centen, Temp
Dim AantalDecimalen, Count
ReDim Aantal(9) As String
Aantal(2) = "duizend "
Aantal(3) = "miljoen "
Aantal(4) = "miljard "
Aantal(5) = "biljoen "

MijnGetal = Trim(Str(MijnGetal)) ' Tekenreeks die bedrag vertegenwoordigt.
AantalDecimalen = InStr(MijnGetal, ".") ' Positie als er geen decimalen zijn.

If AantalDecimalen > 0 Then   ' Centen converteren en MijnGetal omzetten in een eurobedrag.
    Centen = GetTens(Left(Mid(MijnGetal, AantalDecimalen + 1) & "00", 2))
    MijnGetal = Trim(Left(MijnGetal, AantalDecimalen - 1))
End If

Count = 1
Do While MijnGetal <> ""
    Temp = GetHundreds(Right(MijnGetal, 3))
    If Temp <> "" Then Euros = Temp & Aantal(Count) & Euros
    If Len(MijnGetal) > 3 Then
        MijnGetal = Left(MijnGetal, Len(MijnGetal) - 3)
    Else
        MijnGetal = ""
    End If
    Count = Count + 1
Loop

Select Case Euros
    Case "": Euros = "Geen euro’s"
    Case "Een": Euros = "Eén euro"
    Case Else: Euros = Euros & " euro"
End Select

Select Case Centen
    Case "": Centen = " en nul cent"
    Case "Een": Centen = " en één cent"
    Case Else: Centen = " en " & Centen & " cent"
End Select

If MetCenten Then
    SchrijfGetal = Euros & Centen
Else
    SchrijfGetal = Euros
End If

End Function

Function GetHundreds(ByVal MijnGetal)
' Zet een getal van 100-999 om in tekst

Dim Result As String

If Val(MijnGetal) = 0 Then Exit Function
MijnGetal = Right("000" & MijnGetal, 3)

If Mid(MijnGetal, 1, 1) <> "0" Then ' Het aantal honderdtallen omzetten.
       If Mid(MijnGetal, 1, 1) = 1 Then
       Result = "honderd"   
    Else
        Result = GetDigit(Mid(MijnGetal, 1, 1)) & "honderd"
    End If
End If

' Zet tientallen en eenheden om.
If Mid(MijnGetal, 2, 1) <> "0" Then
    Result = Result & GetTens(Mid(MijnGetal, 2))
Else
    Result = Result & GetDigit(Mid(MijnGetal, 3))
End If

GetHundreds = Trim(Replace(Replace(Replace(Result, "eee", "eeë"), "drieen", "drieën"), "eenho", "ho"))

End Function


Function GetTens(TensText)
' Zet een getal tussen 10 en 99 om in tekst.

Dim Result As String

Result = "" ' Waarde van de tijdelijke functie omzetten in Null.
If Val(Left(TensText, 1)) = 1 Then ' Als waarde tussen 10-19...
    Select Case Val(TensText)
        Case 10: Result = "tien"
        Case 11: Result = "elf"
        Case 12: Result = "twaalf"
        Case 13: Result = "dertien"
        Case 14: Result = "dertien"
        Case 15: Result = "vijftien"
        Case 16: Result = "zestien"
        Case 17: Result = "zeventien"
        Case 18: Result = "achttien"
        Case 19: Result = "negentien"
        Case Else
    End Select
Else ' Als waarde tussen 20-99...
    Select Case Val(Left(TensText, 1))
        Case 2: Result = "twintig "
        Case 3: Result = "dertig "
        Case 4: Result = "veertig "
        Case 5: Result = "vijftig "
        Case 6: Result = "zestig "
        Case 7: Result = "zeventig "
        Case 8: Result = "tachtig "
        Case 9: Result = "negentig "
        Case Else
    End Select
    If Right(TensText, 1) = 0 Then
        GetDigit (Right(TensText, 1))
    Else
        Result = Trim(Replace(Replace((GetDigit(Right(TensText, 1)) & "en" & Result), "eee", "eeë"), "riee", "rieë")) ' Het aantal eenheden ophalen.
    End If
End If

GetTens = Result

End Function

Function GetDigit(Digit)
' Zet een getal tussen 1 en 9 om in tekst.

Select Case Val(Digit)
    Case 1: GetDigit = "een"
    Case 2: GetDigit = "twee"
    Case 3: GetDigit = "drie"
    Case 4: GetDigit = "vier"
    Case 5: GetDigit = "vijf"
    Case 6: GetDigit = "zes"
    Case 7: GetDigit = "zeven"
    Case 8: GetDigit = "acht"
    Case 9: GetDigit = "negen"
    Case Else: GetDigit = ""
End Select

End Function
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan