Страницы: 1
RSS
Перевод шестнадцатеричного числа в двоичное средствами VBA
 
Здравствуйте, подскажите пожалуйста, как можно перевести шестнадцатеричное число в двоичное средствами VBA. Формулами Excel пробовал, но максимальное число которое можно перевести это 1FF (511) все что выше выводиться как ошибка #ЧИСЛО!.  
 
Спасибо.
 
Пакет анализа не смотрели?  
Там куча формул такого типа, я правда точно не знаю, которая подходит, но есть  
=HEX2BIN()  
=HEX2DEC()  
=HEX2OCT()  
и наоборот.  
Или это они с ограничениями?
 
Да, работают  
=DEC2HEX(A1;10)  
и назад  
=HEX2DEC(A3)  
Ограничений не заметил (100000 обработало)
 
Решение "в лоб"  
 
Function hex2bin(h As String) As String  
Dim i As Long  
For i = 1 To Len(h)  
Select Case UCase(Mid(h, i, 1))  
Case "0": hex2bin = hex2bin & "0000"  
Case "1": hex2bin = hex2bin & "0001"  
Case "2": hex2bin = hex2bin & "0010"  
Case "3": hex2bin = hex2bin & "0011"  
Case "4": hex2bin = hex2bin & "0100"  
Case "5": hex2bin = hex2bin & "0101"  
Case "6": hex2bin = hex2bin & "0110"  
Case "7": hex2bin = hex2bin & "0111"  
Case "8": hex2bin = hex2bin & "1000"  
Case "9": hex2bin = hex2bin & "1001"  
Case "A": hex2bin = hex2bin & "1010"  
Case "B": hex2bin = hex2bin & "1011"  
Case "C": hex2bin = hex2bin & "1100"  
Case "D": hex2bin = hex2bin & "1101"  
Case "E": hex2bin = hex2bin & "1110"  
Case "F": hex2bin = hex2bin & "1111"  
Case Else: hex2bin = "Error!": Exit Function  
End Select  
Next  
End Function
 
формула  
=СУММПРОИЗВ(ШЕСТН.В.ДВ(ЛЕВСИМВ(ПРАВСИМВ(A1;СТРОКА(ДВССЫЛ("$1:$"&ДЛСТР(A1))))))*10^(4*(СТРОКА(ДВССЫЛ("$1:$"&ДЛСТР(A1)))-1)))
 
5коп:  
 
Dim arr_h()  
Dim arr_b()  
 
Function h2b$(h$)  
Dim i&  
For i = 1 To Len(h)  
   h2b = h2b & arr_b(WorksheetFunction.Match(Mid(h, i, 1), arr_h) - 1)  
Next  
End Function  
 
 
 
Sub test()  
Dim s$  
arr_h = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f")  
arr_b = Array("0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111")  
Do  
s = InputBox("введите шестнадцатеричное число")  
MsgBox h2b(s)  
Loop  
End Sub
Живи и дай жить..
 
Спасибо всем кто ответил. Вариантов, как я понял, много и они работают.
Страницы: 1
Читают тему
Наверх