• 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 letters/tekst

Status
Niet open voor verdere reacties.

spittlik

Gebruiker
Lid geworden
10 jun 2015
Berichten
8
Hallo,

Ik probeer een getal uit de ene cel in de cel ernaast voluit te laten schrijven.
Dus 100 wordt honderd.

Heb al gezocht naar een oplossing op internet, maar alleen oude berichten gevonden. Bij mij (Excel 2010) werkt dat niet.
Weet iemand de oplossing?

Alvast heel erg bedankt.

Groet,
Suzanne
 
Fijn dat je ons laat weten wat je gevonden hebt dat niet bij u zou werken.
 
Aangezien ik hier nu al een paar uur mee aan het stoeien ben weet ik het niet meer precies. Bijvoorbeeld formule BATH.TEKST, maar dan krijg ik arabische tekens.
Ik heb ook een vpa code gevonden. Al weet ik niet goed wat ik daarmee moet doen. Ik ben op de cel gaan staan en heb deze gecopieerd naar mijn document. Uitkomst is #NAAM?
 
Intussen kan je deze van SNB al eens testen of die bij u ook niet zou werken.
Te gebruiken als : =Vertaal(cel met getal)
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
    
    If Right(Format(y, ".00"), 2) <> "00" Then
        x = Split(Format(y, ".00"), ",")(1)
        
        sp = Array(mats(Val(x)), mats(Right(x, 1)), mats(Left(x, 1) & "0"), mats(Left(x, 1)))
        c01 = c01 & " , " & IIf(sp(0) <> "", sp(0), sp(1) & IIf(Left(x, 1) = "1", sp(2), "en" & IIf(sp(2) = "", sp(3) & "tig", sp(2))))
    End If
    
    vertaal = IIf(c01 = "", "nul", Trim(Replace(Replace(Replace(Replace(" " & c01, " eendu", "du"), " eenho", "ho"), "eee", "eeë"), "rieen", "rieën")))
End Function

Function mats(y)
    On Error Resume Next
    mats = Split("__een_twee_drie_vier_vijf_zes_zeven_acht_negen_tien_elf_twaalf_dertien_veertien_twintig_dertig_veertig_tachtig", "_") _
        (UBound(Split(Split("_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_20_30_40_80_", y & "_")(0), "_")))
End Function
 
Via ALT-F11 kom je in de VB-editor daar doe je via invoegen - Module kiezen.
Als je dat hebt gedaan plak je die code daar in het rechtervenster.
Sluiten en klaar is Suzanne.:)

Dan roep je die functie aan via:

=Vertaal(A1) --> als het getal in A1 staat.

Nog vragen?
 
Hoe groot zijn de getallen? Tot 30000 werkt deze oplossing vrij goed. Ik heb overigens geen idee waarom hij er boven de 30000 mee ophoudt, wellicht dat enkele VBA specialisten hier een antwoord op hebben...
 
@Cobbe, jouw VBA oplossing geeft bij bijv 60000 "enzestigduizend" als waarde, enig idee hoe je dat kan ondervangen?
 
:d:d:d
Hij doet het :thumb:

Heel erg bedankt!!

enne....
als ik het nou ook nog in het engels wil ?:eek:
 
Dan deze:


Code:
Option Explicit
'Main Function
Function Vertaal(ByVal MyNumber)
    Dim Dollars, Cents, Temp
    Dim DecimalPlace, Count
    ReDim Place(9) As String
    Place(2) = " Thousand "
    Place(3) = " Million "
    Place(4) = " Billion "
    Place(5) = " Trillion "
    ' String representation of amount.
    MyNumber = Trim(Str(MyNumber))
    ' Position of decimal place 0 if none.
    DecimalPlace = InStr(MyNumber, ".")
    ' Convert cents and set MyNumber to dollar amount.
    If DecimalPlace > 0 Then
        Cents = GetTens(Left(Mid(MyNumber, DecimalPlace) & _
                  "00", 2))
        MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
    End If
    Count = 1
    Do While MyNumber <> ""
        Temp = GetHundreds(Right(MyNumber, 3))
        If Temp <> "" Then Dollars = Temp & Place(Count) & Dollars
        If Len(MyNumber) > 3 Then
            MyNumber = Left(MyNumber, Len(MyNumber) - 3)
        Else
            MyNumber = ""
        End If
        Count = Count + 1
    Loop
    Select Case Dollars
        Case ""
            Dollars = "No number"
        Case "One"
            Dollars = "One"
         Case Else
            Dollars = Dollars & ""
    End Select
    Select Case Cents
        Case ""
            Cents = ""
                     Case Else
            Cents = " Point " & Cents & ""
    End Select
    SpellNumber = Dollars & Cents
End Function
      
' Converts a number from 100-999 into text
Function GetHundreds(ByVal MyNumber)
    Dim Result As String
    If Val(MyNumber) = 0 Then Exit Function
    MyNumber = Right("000" & MyNumber, 3)
    ' Convert the hundreds place.
    If Mid(MyNumber, 1, 1) <> "0" Then
        Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
    End If
    ' Convert the tens and ones place.
    If Mid(MyNumber, 2, 1) <> "0" Then
        Result = Result & GetTens(Mid(MyNumber, 2))
    Else
        Result = Result & GetDigit(Mid(MyNumber, 3))
    End If
    GetHundreds = Result
End Function
      
' Converts a number from 10 to 99 into text.
Function GetTens(TensText)
    Dim Result As String
    Result = ""           ' Null out the temporary function value.
    If Val(Left(TensText, 1)) = 1 Then   ' If value between 10-19...
        Select Case Val(TensText)
            Case 10: Result = "Ten"
            Case 11: Result = "Eleven"
            Case 12: Result = "Twelve"
            Case 13: Result = "Thirteen"
            Case 14: Result = "Fourteen"
            Case 15: Result = "Fifteen"
            Case 16: Result = "Sixteen"
            Case 17: Result = "Seventeen"
            Case 18: Result = "Eighteen"
            Case 19: Result = "Nineteen"
            Case Else
        End Select
    Else                                 ' If value between 20-99...
        Select Case Val(Left(TensText, 1))
            Case 2: Result = "Twenty "
            Case 3: Result = "Thirty "
            Case 4: Result = "Forty "
            Case 5: Result = "Fifty "
            Case 6: Result = "Sixty "
            Case 7: Result = "Seventy "
            Case 8: Result = "Eighty "
            Case 9: Result = "Ninety "
            Case Else
        End Select
        Result = Result & GetDigit _
            (Right(TensText, 1))  ' Retrieve ones place.
    End If
    GetTens = Result
End Function
     
' Converts a number from 1 to 9 into text.
Function GetDigit(Digit)
    Select Case Val(Digit)
        Case 1: GetDigit = "One"
        Case 2: GetDigit = "Two"
        Case 3: GetDigit = "Three"
        Case 4: GetDigit = "Four"
        Case 5: GetDigit = "Five"
        Case 6: GetDigit = "Six"
        Case 7: GetDigit = "Seven"
        Case 8: GetDigit = "Eight"
        Case 9: GetDigit = "Nine"
        Case Else: GetDigit = ""
    End Select
End Function
 
Voor herstellingen dien je je te melden bij de auteur; zijnde SNB :):)
 
@Cobbe. Heel erg bedankt voor uw hulp. Die nederlandse werkt goed op die paar foutjes na, maar daar kom ik nog wel uit. Die Engelse bevat een fout, waardoor hij het helemaal niet doet. maar ik zal me eens in dat SNB verdiepen.
Nog een vraagje (Deze hele materie is nogal nieuw voor mij) Heb ik nu een macro gemaakt? Ik moet het bestand dus opslaan als een excel bestand met macro's? Dit geldt toch per document? Als ik dit in een ander document wil dan moet ik weer hetzelfde doen toch?
Ik kan niet beide codes in 1 document gebruiken, of wel?
Paar vraagjes dus :eek:
Nogmaals bedankt voor uw tijd.

Gr.
Suzanne
 
maar ik zal me eens in dat SNB verdiepen.
SNB is de gebruikersnaam van een gewaardeerde en kundige helper op dit forum. Hij heeft die code geschreven en dit is zijn website: VBA for smarties

Werkmappen met macro's moet je opslaan als .xlsm of .xlsb. Het laatstgenoemde formaat levert iets kleinere bestanden op. Het beste is om de macro te kopiëren voor iedere werkmap waarin je het wilt gebruiken. Er is geen beperking aan routines die je wilt toevoegen aan je werkmap. Beide codes toevoegen is dus mogelijk.
 
Laatst bewerkt:
Bedankt voor de uitleg Timshel.

VBA voor Dummies zou meer iets voor mij zijn geloof ik ;)
 
Dat bestand is een voorbeeld, waarvan je de code eventueel zou kunnen gebruiken in je eigen excelsheet. Als één van de andere oplossingen hier niet voldoet bijvoorbeeld.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan