У меня есть 14-значные шестнадцатеричные числа в Excel, которые я хочу преобразовать в десятичное число.

Например, в 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 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .