- ベストアンサー
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)) 使い方が間違ってますでしょうか?
- みんなの回答 (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 結合時の桁落ち対策で桁数を固定しています。
その他の回答 (2)
- eden3616
- ベストアンサー率65% (267/405)
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)
https://support.office.com/ja-jp/article/HEX2BIN-%E9%96%A2%E6%95%B0-a13aafaa-5737-4920-8424-643e581828c1 数値が負の数である場合、数値に FFFFFFFE00 より小さい値を指定することはできません。数値が正の数である場合、数値に 1FF より大きい値を指定することはできません。 扱える正の数は10進数の511までのようです。
お礼
ありがとうございます。 データをセルで分割して一つ一つ変換することで解決できました。