DEC2HEX

F

Francis Ang

I am trying to convert Decimal to Hex and found the following codes in Excel
community website. The function works fine except that when I enter decimal
values such as 112 or 160 or 208 nothing happens; there is no hex value
returned. These are the only numbers that I noticed so far, there could be
more!

Any reason for this?

Any help would be greatly appreciated.

Public Function Decimal_To_Hex(ByVal vntDecimal_Value As Variant) As String
'----------------------------------------------------------------------------
' Experts Exchange Question:
' Home \ All Topics \ Applications \ MS Office \ Excel
'
'http://www.experts-exchange.com/Applications/MS_Office/Excel/Q_21547447.html
' Creating Column that does hexidecimal math
'
' Copyright (c) 2005 Clearlogic Concepts (UK) Limited
' N.Lee [ http://NigelLee.info ] - 1 September 2005
'----------------------------------------------------------------------------
Dim intHex_Value As Integer
Dim intLoop As Integer
Dim vntDec_Value As Variant
Dim strReturn As String

On Error GoTo Err_Decimal_To_Hex

If Len(vntDecimal_Value) > 14 Then
strReturn = "* ERROR *"
Else
strReturn = ""
vntDec_Value = CDec(vntDecimal_Value)

For intLoop = Len(vntDecimal_Value) - 1 To 0 Step -1
intHex_Value = Int(vntDec_Value / (16 ^ intLoop))
vntDec_Value = vntDec_Value - (intHex_Value * (16 ^ intLoop))
strReturn = strReturn & Hex(intHex_Value)
Next intLoop
End If

Exit_Decimal_To_Hex:

On Error Resume Next

If Left$(strReturn, 1) = "0" Then
strReturn = StrReverse(strReturn)
strReturn = StrReverse(Left$(strReturn, InStr(strReturn, "0") - 1))
End If

Decimal_To_Hex = strReturn

Exit Function

Err_Decimal_To_Hex:

On Error Resume Next

strReturn = "* ERROR *"

Resume Exit_Decimal_To_Hex

End Function
 
F

Francis Ang

I did a further check and found out that if the decimal values are 112, 128,
144, 160, 176, 192, 208, 224 and 240 no hex values will be returned.
 
D

dk

I did a further check and found out that if the decimal values are 112, 128,
144, 160, 176, 192, 208, 224 and 240 no hex values will be returned.



Francis Ang said:
I am trying to convert Decimal to Hex and found the following codes in Excel
community website.  The function works fine except that when I enter decimal
values such as 112 or 160 or 208 nothing happens; there is no hex value
returned.  These are the only numbers that I noticed so far, there could be
more!  
Any reason for this?
Any help would be greatly appreciated.
Public Function Decimal_To_Hex(ByVal vntDecimal_Value As Variant) As String
'--------------------------------------------------------------------------­--
' Experts Exchange Question:
' Home \ All Topics \ Applications \ MS Office \ Excel
'
'http://www.experts-exchange.com/Applications/MS_Office/Excel/Q_215474....
' Creating Column that does hexidecimal math
'
' Copyright (c) 2005 Clearlogic Concepts (UK) Limited
' N.Lee [http://NigelLee.info] - 1 September 2005
'--------------------------------------------------------------------------­--
   Dim intHex_Value                                     As Integer
   Dim intLoop                                           As Integer
   Dim vntDec_Value                                     As Variant
   Dim strReturn                                         As String
   On Error GoTo Err_Decimal_To_Hex
   If Len(vntDecimal_Value) > 14 Then
      strReturn = "* ERROR *"
   Else
      strReturn = ""
      vntDec_Value = CDec(vntDecimal_Value)
      For intLoop = Len(vntDecimal_Value) - 1 To 0 Step -1
          intHex_Value = Int(vntDec_Value / (16 ^ intLoop))
          vntDec_Value = vntDec_Value - (intHex_Value * (16^ intLoop))
          strReturn = strReturn & Hex(intHex_Value)
      Next intLoop
   End If

   On Error Resume Next
   If Left$(strReturn, 1) = "0" Then
      strReturn = StrReverse(strReturn)
      strReturn = StrReverse(Left$(strReturn, InStr(strReturn, "0") - 1))
   End If
   Decimal_To_Hex = strReturn
   Exit Function

   On Error Resume Next
   strReturn = "* ERROR *"
   Resume Exit_Decimal_To_Hex
End Function- Hide quoted text -

- Show quoted text -

I did not go through the code that you have posted but you can use
this code:

Function DecToHex(ByVal x As Variant) As String

Dim y

x = CDec(x)
Do
y = (x / 16 - Int(x / 16)) * 16
If y < 10 Then
DecToHex = y & DecToHex
Else
DecToHex = Chr$(y + 55) & DecToHex
End If
x = Int(x / 16)
Loop While x
End Function
 
J

Jim Cone

MsgBox Hex(160)
--
Jim Cone
Portland, Oregon USA




"Francis Ang" <[email protected]>
wrote in message
I did a further check and found out that if the decimal values are 112, 128,
144, 160, 176, 192, 208, 224 and 240 no hex values will be returned.
 
F

Francis Ang

Thanks Dk.

Your solution worked for me. Thank you very much.

dk said:
I did a further check and found out that if the decimal values are 112, 128,
144, 160, 176, 192, 208, 224 and 240 no hex values will be returned.



Francis Ang said:
I am trying to convert Decimal to Hex and found the following codes in Excel
community website. The function works fine except that when I enter decimal
values such as 112 or 160 or 208 nothing happens; there is no hex value
returned. These are the only numbers that I noticed so far, there could be
more!
Any reason for this?
Any help would be greatly appreciated.
Public Function Decimal_To_Hex(ByVal vntDecimal_Value As Variant) As String
'--------------------------------------------------------------------------­--
' Experts Exchange Question:
' Home \ All Topics \ Applications \ MS Office \ Excel
'
'http://www.experts-exchange.com/Applications/MS_Office/Excel/Q_215474....
' Creating Column that does hexidecimal math
'
' Copyright (c) 2005 Clearlogic Concepts (UK) Limited
' N.Lee [http://NigelLee.info] - 1 September 2005
'--------------------------------------------------------------------------­--
Dim intHex_Value As Integer
Dim intLoop As Integer
Dim vntDec_Value As Variant
Dim strReturn As String
On Error GoTo Err_Decimal_To_Hex
If Len(vntDecimal_Value) > 14 Then
strReturn = "* ERROR *"
Else
strReturn = ""
vntDec_Value = CDec(vntDecimal_Value)
For intLoop = Len(vntDecimal_Value) - 1 To 0 Step -1
intHex_Value = Int(vntDec_Value / (16 ^ intLoop))
vntDec_Value = vntDec_Value - (intHex_Value * (16 ^ intLoop))
strReturn = strReturn & Hex(intHex_Value)
Next intLoop
End If

On Error Resume Next
If Left$(strReturn, 1) = "0" Then
strReturn = StrReverse(strReturn)
strReturn = StrReverse(Left$(strReturn, InStr(strReturn, "0") - 1))
End If
Decimal_To_Hex = strReturn
Exit Function

On Error Resume Next
strReturn = "* ERROR *"
Resume Exit_Decimal_To_Hex
End Function- Hide quoted text -

- Show quoted text -

I did not go through the code that you have posted but you can use
this code:

Function DecToHex(ByVal x As Variant) As String

Dim y

x = CDec(x)
Do
y = (x / 16 - Int(x / 16)) * 16
If y < 10 Then
DecToHex = y & DecToHex
Else
DecToHex = Chr$(y + 55) & DecToHex
End If
x = Int(x / 16)
Loop While x
End Function
 
F

Francis Ang

Thanks for the suggestion, Jim.

Initially, I did not know understand your reply. Then it dawned upon me how
to apply of your suggestion to solve my problem.

Thank you, Jim.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top