10進数と16進数を相互に変換する方法を解説します。
10進数を16進数に変換する - Hex関数
10進数を16進数に変換するにはHex関数を使用します。
Dim str16進数値 As String str16進数値 = Hex(1) ' "1" str16進数値 = Hex(10) ' "A" str16進数値 = Hex(100) ' "64" str16進数値 = Hex(1000) ' "3E8" str16進数値 = Hex(-100) ' "FF9C"
Hex関数に10進数(通常の数値)を渡すと、
16進数表記の文字列(String型)として取得できます。
引数に小数を渡した場合は、整数に丸めてから16進数化されます。
16進数を10進数に変換する - &H接頭辞
VBAには「&Hから始まる値を16進数の数値と認識する」仕様があります。
Dim lng10進数値 As Long lng10進数値 = &H100 ' 256 lng10進数値 = &HFF ' 255 lng10進数値 = &H10AB ' 4267
この&H接頭辞を使用した記述を「16進数リテラル」と呼びます。
ベタ打ちの値であれば、この書き方で直接10進数に変換が可能です。
この記法の応用で、「&Hから始まる文字列をCLngで整数に変換」すると、
16進数を10進数の数値として取得することができます。
16進数を10進数に変換したい場合は、
16進数テキストの先頭に&Hを文字列結合してからCLng関数を使用してください。
Dim lng10進数値 As Long Dim str16進数値 As String: str16進数値 = "10AB" lng10進数値 = CLng("&H" & str16進数値) ' 4267
16進数リテラル使用時とは違い、
CLngを通さないと文字列のまま処理されますのでご注意ください。
Range("A1") = CLng("&H" & str16進数値) ' セルに出力されるのは4267 Range("A1") = "&H" & str16進数値 ' セルに出力されるのは"&H10AB"