От шестнадцатеричного до десятичного числа в Excel

424
Ben

У меня есть 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.

Что я делаю неправильно?

0
Вы можете использовать функцию `CInt`. harrymc 5 лет назад 0
Спасибо, AFH, я внес изменения, которые вы предложили. К сожалению, это все еще не работает. все последние цифры заканчиваются на 0 вместо числа, которое должно быть. Ben 5 лет назад 0
Попробуйте использовать тип данных «option» вместо «Double». harrymc 5 лет назад 0
Excel имеет только 15-значную десятичную точность, хотя VBA может иметь более высокую точность, используя тип данных Decimal. Чтобы вернуть значение длиной более 15 цифр, вам нужно будет вернуть строку. Например: `HexadecimalToDecimal = CStr (CDec (ModifiedHexValue))`. И вам может потребоваться обеспечить запуск `& H` во всех случаях. Ron Rosenfeld 5 лет назад 0

1 ответ на вопрос

1
Ron Rosenfeld

Вам нужно будет вернуть значение в виде строки, по крайней мере, если результат имеет точность более 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немного изменил вашу процедуру добавления.

Похожие вопросы