Is there a function that returns the words First /Second etc when a number is passed as an input
Example:
FuncX(1) = "First"
FuncX(9) = "Ninth"
Or does it need to be done the hard way - manually declaring and retrieving?
Printable View
Is there a function that returns the words First /Second etc when a number is passed as an input
Example:
FuncX(1) = "First"
FuncX(9) = "Ninth"
Or does it need to be done the hard way - manually declaring and retrieving?
Unfortunately, it has to be done the hard way.
Updated: (Ten Hundred Just Didn't Sound Right?!?)
Here you go...
This may be a bit overkill, but this will convert any number between 0 and 99999 to a sentance. If you set the "First" argument in the function, it will return words like "First, Second, Third", if you set to false then you will get "One, Two, Three"
Try This:
- Open a new project in VB
- Add 2 TextBoxes (Text1,Text2)
- Add a Command Button (Command1)
- Copy the code below to the form
Code:Private Sub Form_Load()
Text1.Text = "Enter Number Here"
Text2.Text = ""
End Sub
Private Sub Command1_Click()
Text2.Text = GetNumberName(Val(Text1.Text), True)
End Sub
Private Function GetNumberName(Number As Long, First As Boolean) As String
'Test If Zero
If Number <= 0 Then
GetNumberName = "Zero"
Exit Function
End If
If Number > 99999 Then
GetNumberName = "Too Big"
Exit Function
End If
'Build Ten Thousand Prefix
If Number >= 10000 Then
If ((Number / 1000) = (Int(Number / 1000))) Then
If First Then
GetNumberName = GetNumberName & BuildDigitNames(Int(Number / 1000), False) & " Thousandth"
Exit Function
Else
GetNumberName = GetNumberName & BuildDigitNames(Int(Number / 1000), False) & " Thousand"
Exit Function
End If
Else
GetNumberName = GetNumberName & BuildDigitNames(Int(Number / 1000), False) & " Thousand "
Number = Number Mod 1000
End If
End If
'Build Thousand Prefix
If Number >= 1000 Then
If ((Number / 1000) = (Int(Number / 1000))) Then
If First Then
GetNumberName = GetNumberName & BuildDigitNames(Int(Number / 1000), False) & " Thousandth"
Exit Function
Else
GetNumberName = GetNumberName & BuildDigitNames(Int(Number / 1000), False) & " Thousand"
Exit Function
End If
Else
GetNumberName = GetNumberName & BuildDigitNames(Int(Number / 1000), False) & " Thousand "
Number = Number Mod 1000
End If
End If
'Build Hundred Prefix
If Number >= 100 Then
If ((Number / 100) = (Int(Number / 100))) Then
If First Then
GetNumberName = GetNumberName & BuildDigitNames(Int(Number / 100), False) & " Hundredth"
Exit Function
Else
GetNumberName = GetNumberName & BuildDigitNames(Int(Number / 100), False) & " Hundred"
Exit Function
End If
Else
GetNumberName = GetNumberName & BuildDigitNames(Int(Number / 100), False) & " Hundred And "
Number = Number Mod 100
End If
End If
'Build Number Suffix
If Number < 100 Then
GetNumberName = GetNumberName & BuildDigitNames(Number, First)
Exit Function
End If
End Function
Private Function BuildDigitNames(Number As Long, First As Boolean) As String
Dim FirstNames As Variant
Dim OneNames As Variant
Dim TenNames As Variant
Dim TenthNames As Variant
OneNames = Array("", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen")
FirstNames = Array("", "First", "Second", "Third", "Fourth", "Fifth", "Sixth", "Seventh", "Eighth", "Ninth", "Tenth", "Eleventh", "Twelfth", "Thirteenth", "Fourteenth", "Fifteenth", "Sixteenth", "Seventeenth", "Eighteenth", "Nineteenth")
TenNames = Array("", "Ten", "Twenty", "Thirty", "Fourty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety")
TenthNames = Array("", "Tenth", "Twentieth", "Thirtieth", "Fourtieth", "Fiftieth", "Sixtieth", "Seventieth", "Eightieth", "Ninetieth")
Select Case Number
Case 0 To 19
If First Then
BuildDigitNames = FirstNames(Number)
Else
BuildDigitNames = OneNames(Number)
End If
Case 20, 30, 40, 50, 60, 70, 80, 90
If First Then
BuildDigitNames = TenthNames(Number / 10)
Else
BuildDigitNames = TenNames(Number / 10)
End If
Case 21 To 29, 31 To 39, 41 To 49, 51 To 59, 61 To 69, 71 To 79, 81 To 89, 91 To 99
If First Then
BuildDigitNames = TenNames(Int(Number / 10)) & "-" & FirstNames(Number Mod 10)
Else
BuildDigitNames = TenNames(Int(Number / 10)) & "-" & OneNames(Number Mod 10)
End If
End Select
End Function