7Byte Hex в Dec Преобразование в Excel ... Это можно сделать с помощью VBA? - PullRequest
0 голосов
/ 12 июня 2018

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

Я дошел до использования формул hex2bin и затем bin2dec в Excel, но, к сожалению, я обнаружил, что Excel округляет наименьшее значение 4 десятичных знака.

Пример:
7Byte Hex: 0x803277323A8904
Выходные данные Excel: 36084284544158000
Правильное десятичное число: 36084284544157956

Возможно ли написать сценарий этого преобразованияв VBA?Я полный новичок в Visual Basic, и хотя я просмотрел несколько видео и нашел несколько тем, говорящих на похожие темы, я нашел ответы вне контекста.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Это небольшой вариант кода Рика Ротштейна

Function HexToDecs(ByVal HexString As String) As String
  Dim X As Integer
  Dim BinStr As String
  Const BinValues = "0000000100100011010001010110011110001001101010111100110111101111"
  If Left$(HexString, 2) Like "&[hH]" Then
    HexString = Mid$(HexString, 3)
  End If
  If Len(HexString) <= 23 Then
    For X = 1 To Len(HexString)
      BinStr = BinStr & Mid$(BinValues, 4 * Val("&h" & Mid$(HexString, X, 1)) + 1, 4)
    Next
    HexToDecd = CDec(0)
    For X = 0 To Len(BinStr) - 1
      HexToDecd = HexToDecd + Val(Mid(BinStr, Len(BinStr) - X, 1)) * 2 ^ X
    Next
  Else
    ' Number is too big, handle error here
  End If
  HexToDecs = CStr(HexToDecd)
End Function

enter image description here

ПРИМЕЧАНИЕ:

  • Этот UDF () возвращает строковое представление целого числа, чтобы избежать ограничения в 15 цифр на истинные числовые значения.
  • Я решил не начинать свою входную строку с 0x
0 голосов
/ 12 июня 2018

Excel максимальное количество цифр.В электронной таблице Excel существует ограничение для хранения числа в ячейке, которое составляет 15 цифр (15 цифр) независимо от того, являются ли числа десятичными разрядами.В Excel это называется «15 значащих цифр точности», что соответствует «IEEE 754». 24 февраля 2015 года

Чтобы получить 36084284544157956, который имеет 17 цифр, сохраните ячейку как текст..


Даже VBA не нравится отображать такие большие числа:

Public Sub TestMe()

    Dim inputString As String: inputString = "123456789012345678"
    Dim someValue As Double

    someValue = inputString
    Debug.Print someValue + 1

End Sub

получает: 1,23456789012346E+17


Чтобы представить текстовое значение в Excelячейка, убедитесь, что вы форматируете ячейку, прежде чем помещать в нее текст:

Option Explicit

Public Sub TestMe()

    With Range("D2")
        .NumberFormat = "@"
        .Value2 = "123456789012345678"
    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...