Md Ariful Islam

Md Ariful Islam

Md Ariful Islam

profile-pic
Excel VBA : Convert Numbers to Words for Kuwait Dinar
EXCEL VBA

Excel VBA : Convert Numbers to Words for Kuwait Dinar

February 7, 2024

Question: In Excel, I’m seeking a way to transform a numeric value in Kuwaiti Dinars into words. For instance, if it’s 120.050 KWD, then it should be converted to “One Hundred Twenty Kuwaiti Dinars and Fifty Fils Only.” Similarly, if the value is 100 KWD, it should be converted to “One Hundred Kuwaiti Dinars Only.

Solution:

1. Press Alt + F11 keys to open the Microsoft Visual Basic for Application window.

Developer Tab - Excel VBA : Convert Numbers to Words for Kuwait Dinar

2. Click Insert > Module and paste below VBA to the new Module window.

Insert Module

Function SpellKD(ByVal MyNumber)
 
 '**** Created by Ariful Islam
 '**** arifulsh.com
 '**** Last updated 02-April-2021
 '**** SpellKD shows KD to precede, and to show "" for 0 Fils)
 '****************' Main Function *'****************
 
Dim Kuwaiti_Dinar, Fils, Temp
Dim DecimalPlace, Count
ReDim Place(9) As String
Place(2) = " Thousand "
Place(3) = " Lac "
Place(4) = " Crore "
Place(5) = " Arab " ' String representation of amount
MyNumber = Trim(Str(MyNumber)) ' Position of decimal place 0 if none
DecimalPlace = InStr(MyNumber, ".")
 ' Convert Fils and set MyNumber to Dinar amount
If DecimalPlace > 0 Then
    Fils = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2))
    MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If
Count = 1
Do While MyNumber <> ""
    If Count = 1 Then Temp = GetHundreds(Right(MyNumber, 3))
    If Count > 1 Then Temp = GetHundreds(Right(MyNumber, 2))
    If Temp <> "" Then Kuwaiti_Dinar = Temp & Place(Count) & Kuwaiti_Dinar
    If Count = 1 And Len(MyNumber) > 3 Then
        MyNumber = Left(MyNumber, Len(MyNumber) - 3)
    Else
        If Count > 1 And Len(MyNumber) > 2 Then
            MyNumber = Left(MyNumber, Len(MyNumber) - 2)
        Else
            MyNumber = ""
        End If
    End If
    Count = Count + 1
 Loop
Select Case Kuwaiti_Dinar
Case ""
    KD = ""
Case "One"
    KD = "One Kuwaiti Dinar"
Case Else
     '****************************************************************
     'modified the following two lines to display "KD" to precede
     ' rem'd the first line and added the second line
     '****************************************************************
     'KD = KD & " KD"
    Kuwaiti_Dinar = Kuwaiti_Dinar & " Kuwaiti Dinar"
     
End Select
Select Case Fils
Case ""
     '****************************************************************
     'modified the following two lines to display nothing for no Fils
     ' rem'd the first line and added the second line
     '****************************************************************
     
     'Fils = " and No Fils"
     '****************************************************************
     'modified the following line to display " Only" for no Fils
     ' rem'd the first line and added the second line
     '****************************************************************
     'Fils = ""
    Fils = " Only"
Case "One"
    Fils = " and One Fils"
Case Else
    Fils = " and " & Fils & " Fils"
     
End Select
SpellKD = Kuwaiti_Dinar & Fils
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

Save As

However, the counting mechanism will only recognize the initial two digits of fils and cannot exceed 99 fils.

 

Sample File : Download