和風スパゲティのレシピ

日本語でコーディングするExcelVBA

10進数と16進数を相互変換する - &H/Hex関数

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"