- ベストアンサー
VBAで進数変換
マクロ内で、 16進数から2進数、2進数から10進数といったように 変換したいんですけど、うまいほうほうないですか? シート上ならHex2decとか使えるんですけど、 10桁までしかできないし、できればマクロ内でやりたいんです。 でも、Macro中には10進数から16進数とかはあるんですけど、逆が見当たらないんです。 ちなみにWorksheetFunctionにもありません。 助けてください。
- みんなの回答 (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
その他の回答 (2)
- popesyu
- ベストアンサー率36% (1782/4883)
一文字づつ分解して(笑) 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
あ。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 これだとちょっと効率悪いですけどね。
お礼
やっぱ作るしかないみたいですね。 ありがとうございました。