DEC2HEX

  • Thread starter Thread starter Francis Ang
  • Start date Start date
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
 
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.
 
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
 
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.
 
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
 
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

Back
Top