How to Convert a decimal number into a Roman number?
Posted on January 5, 2009
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 'Math - How to Convert a decimal number into a Roman number? Option Explicit Public Function fRoman(ByVal intValue As Integer) As String 'Convert a decimal number between 1 and 3999 into a Roman number. Dim vDigits As Variant Dim iPos As Integer Dim iDigit As Integer Dim sTemp As String 'Build up the array of roman digits vDigits = Array("I", "V", "X", "L", "C", "D", "M") iPos = LBound(vDigits) sTemp = "" Do While intValue > 0 iDigit = intValue Mod 10 intValue = intValue \ 10 Select Case iDigit Case 1 sTemp = vDigits(iPos) & sTemp Case 2 sTemp = vDigits(iPos) & vDigits(iPos) & sTemp Case 3 sTemp = vDigits(iPos) & vDigits(iPos) & vDigits(iPos) & sTemp Case 4 sTemp = vDigits(iPos) & vDigits(iPos + 1) & sTemp Case 5 sTemp = vDigits(iPos + 1) & sTemp Case 6 sTemp = vDigits(iPos + 1) & vDigits(iPos) & sTemp Case 7 sTemp = vDigits(iPos + 1) & vDigits(iPos) & vDigits(iPos) & sTemp Case 8 sTemp = vDigits(iPos + 1) & vDigits(iPos) & vDigits(iPos) & vDigits(iPos) & sTemp Case 9 sTemp = vDigits(iPos) & vDigits(iPos + 2) & sTemp End Select iPos = iPos + 2 Loop fRoman = sTemp End Function 'How can I call this function: ' 'Debug.Print fRoman(123) 'Will return "CXXIII" |