OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

VBAで進数変換

  • 困ってます
  • 質問No.5200
  • 閲覧数12478
  • ありがとう数14
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 44% (33/74)

マクロ内で、
16進数から2進数、2進数から10進数といったように
変換したいんですけど、うまいほうほうないですか?

シート上ならHex2decとか使えるんですけど、
10桁までしかできないし、できればマクロ内でやりたいんです。
でも、Macro中には10進数から16進数とかはあるんですけど、逆が見当たらないんです。

ちなみにWorksheetFunctionにもありません。

助けてください。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル13

ベストアンサー率 46% (643/1383)

こんな感じでどうでしょ?

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

お礼率 44% (33/74)

やっぱ作るしかないみたいですね。
ありがとうございました。
投稿日時 - 0000-00-00 00:00:00
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1

 あ。2進数に関する関数がないので、自分で作ってください(笑)  たとえばこんな感じ。 Function Dec2Bin(DecimalVal) i = 1 Ret = "" Do While i <= DecimalVal If (i And DecimalVal) <> 0 Then ...続きを読む
 あ。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

 これだとちょっと効率悪いですけどね。

  • 回答No.2
レベル14

ベストアンサー率 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 m ...続きを読む
一文字づつ分解して(笑)
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
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ