• ベストアンサー

VBAで進数変換

マクロ内で、 16進数から2進数、2進数から10進数といったように 変換したいんですけど、うまいほうほうないですか? シート上ならHex2decとか使えるんですけど、 10桁までしかできないし、できればマクロ内でやりたいんです。 でも、Macro中には10進数から16進数とかはあるんですけど、逆が見当たらないんです。 ちなみにWorksheetFunctionにもありません。 助けてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

こんな感じでどうでしょ? 16進→数値  Val("&HFF") 数値→16進  Hex$(255) 8進→数値  Val("&o377") 数値→8進  Oct$(377) 数値→2進 Public Function Num2Bin(Value As Variant) As Variant   Dim NVal As Long   Dim i As Long   If IsNumeric(Value) = False Then     Num2Bin = Null     Exit Function   End If   NVal = Val(Value)   For i = 15 To 0 Step -1     Num2Bin = Num2Bin & ((NVal And 2 ^ i) / (2 ^ i))   Next i End Function 2進→数値 Public Function Bin2Num(Value As Variant) As Variant   Dim i As Long   Dim StrVal As String   Dim Cursor As Long      If IsNumeric(Value) = False Then     Bin2Num = Null     Exit Function   End If   StrVal = CStr(Value)      Cursor = 0   For i = Len(StrVal) To 1 Step -1     Select Case Mid$(StrVal, i, 1)       Case "0"       Case "1"         Bin2Num = Bin2Num + (2 ^ Cursor)       Case Else         Bin2Num = Null         Exit Function     End Select     Cursor = Cursor + 1   Next i End Function

tKc
質問者

お礼

やっぱ作るしかないみたいですね。 ありがとうございました。

その他の回答 (2)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

一文字づつ分解して(笑) 16→10に計算しなおすマクロ。 基数の16を2にすれば、2進数にも対応可・・・ sub sinsuu() '数値取得 suuji = Cells(1, 1) '文字数数える mojisuu = Len(suuji) '初期値 xxx = 0 h = 1 '数値を分解し、一文字づつ掛け算 For i = 1 To mojisuu keta = Mid(suuji, mojisuu + 1 - i, 1) '16進数変換 Select Case keta Case "A" keta = 10 Case "B" keta = 11 Case "C" cata = 12 Case "D" keta = 13 Case "E" keta = 14 Case "F" keta = 15 End Select xxx = keta * h + xxx '基数 h = h * 16 Next i MsgBox xxx end sub

noname#25358
noname#25358
回答No.1

 あ。2進数に関する関数がないので、自分で作ってください(笑)  たとえばこんな感じ。 Function Dec2Bin(DecimalVal) i = 1 Ret = "" Do While i <= DecimalVal If (i And DecimalVal) <> 0 Then Ret = "1" & Ret Else Ret = "0" & Ret End If i = i * 2 Loop Ret = "&B" & Ret Dec2Bin = Ret End Function  これだとちょっと効率悪いですけどね。

関連するQ&A