• ベストアンサー

EXCEL VBA 16進から2進に変換

EXCEL VBAにて16進数から2進数に変換したいと思い、 下記を実行したところ使用したところ、A1セルに入っている値が "AA"といったように2桁なら上手くいくんですが "AAA"というようにそれ以上の桁数になると、Hex2Binのプロパティが 取得できませんというエラーが出てしまいます。 Dim bin_1 As String bin_1 = Application.WorksheetFunction.Hex2Bin(Cells(1、1)) 使い方が間違ってますでしょうか?

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

No2のsampleコードの訂正です。 Sub sample() Dim i As Integer Dim bin_1 As String Dim dat As String dat = "AAA" For i = 0 To Int(Len(dat) / 2) - 1   If i = 0 Then     bin_1 = bin_1 & WorksheetFunction.Hex2Bin(Mid(dat, i * 2 + 1, 2))   Else     bin_1 = bin_1 & WorksheetFunction.Hex2Bin(Mid(dat, i * 2 + 1, 2), 8)   End If Next i If Len(dat) < 2 Then   bin_1 = bin_1 & WorksheetFunction.Hex2Bin(Right(dat, Len(dat) Mod 2)) Else   If Len(dat) Mod 2 = 1 Then     bin_1 = bin_1 & WorksheetFunction.Hex2Bin(Right(dat, Len(dat) Mod 2), 4)   End If End If Debug.Print bin_1 End Sub 結合時の桁落ち対策で桁数を固定しています。

garigarisama
質問者

お礼

ありがとうございます。 データをセルで分割して一つ一つ変換することで解決できました。

その他の回答 (2)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1に補足です。 1FF以上を扱いたい場合は、適当な位置で区切り変換後に結合します。 下のサンプルでは変数datに格納された文字列(16進数)を2桁で区切り for~nextにより2進数に変換結合しながらbin_1に格納し、 datが奇数桁の場合に最後の桁を変換して結合しています。 Sub sample() Dim i As Integer Dim bin_1 As String Dim dat As String dat = "AAA" For i = 0 To Int(Len(dat) / 2) - 1   bin_1 = bin_1 & WorksheetFunction.Hex2Bin(Mid(dat, i * 2 + 1, 2)) Next i If Len(dat) Mod 2 = 1 Then   bin_1 = bin_1 & WorksheetFunction.Hex2Bin(Right(dat, Len(dat) Mod 2)) End If Debug.Print bin_1 End Sub

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

https://support.office.com/ja-jp/article/HEX2BIN-%E9%96%A2%E6%95%B0-a13aafaa-5737-4920-8424-643e581828c1 数値が負の数である場合、数値に FFFFFFFE00 より小さい値を指定することはできません。数値が正の数である場合、数値に 1FF より大きい値を指定することはできません。 扱える正の数は10進数の511までのようです。

関連するQ&A