![Excel 中的 14 位十六进制转十进制](https://linux22.com/image/1575409/Excel%20%E4%B8%AD%E7%9A%84%2014%20%E4%BD%8D%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%8D%81%E8%BF%9B%E5%88%B6.png)
Excel 中有一些 14 位十六进制数,我想将其转换为十进制数。
例如,在 C2 中,数字是 0438E96A095180,以十进制表示应该是 1188475064373632。
我尝试过 VBA 中的一个模块,但是它不起作用:
' Force explicit declaration of variables
Option Explicit
' Convert hex to decimal
' In: Hex in string format
' Out: Double
Public Function HexadecimalToDecimal(HexValue As String) As Double
' If hex starts with 0x, replace it with &H to represent Hex that VBA will understand
Dim ModifiedHexValue As String
ModifiedHexValue = Replace(HexValue, "0x", "&H")
HexadecimalToDecimal = CDec(ModifiedHexValue)
End Function
这样我得到的是十进制数 1188475064373630,而不是 1188475064373632。
我究竟做错了什么?
答案1
您需要将该值作为字符串返回,至少结果的精度要超过 15 位。
例如:
Option Explicit
' Convert hex to decimal
' In: Hex in string format
' Out: Decimal in string format
Public Function HexadecimalToDecimal(HexValue As String) As String
' If hex starts with 0x, remove it to represent Hex that VBA will understand
Dim ModifiedHexValue As String
ModifiedHexValue = "&H" & Replace(HexValue, "0x", "")
HexadecimalToDecimal = CDec(ModifiedHexValue)
End Function
我将让你测试长度并决定是否要返回字符串或数字;你会注意到我&H
稍微修改了你的添加例程。