本ページには広告が含まれています。

Excel VBA Hex関数 数値を16進数の文字列に変換する

Excel VBA Hex関数は数値を16進数の文字列に変換します

Excel VBAの「Hex関数」について解説します。

スポンサーリンク

Hex関数とは

Excel VBA の Hex関数とは、指定した数値を16進数で表した文字列を返す関数です。

Hex関数(Visual Basic for Applications リファレンス)

スポンサーリンク

構文(引数と戻り値)

Excel VBAの関数を使いこなすには、関数の構文を理解しておくことが重要です。

構文

Hex(number)

※ 引数は省略できません。

引数と戻り値

Hex 関数の引数と戻り値は次のとおりです。

Hex関数説明
引数(number)Long型の範囲の数式または文字列式を指定します。
戻り値最大8桁の16進数を表す文字列(string型)

解説

  • 引数 Long型 の範囲とは、-2,147, 483,648 〜 2,147, 483,647 の整数値です。
  • 引数が整数ではない場合、最も近い整数に丸めてから変換します。
  • 引数式の値が「null」の場合の戻り値は「null」、「空」の場合は「0」が返ります。
  • 引数に範囲外の値を指定すると「エラー 6 オーバーフローしました。」が発生します。
  • 引数に数値以外の値を指定すると「エラー 13 型が一致しません。」が発生します。

16進数とは

16進数とは、0から9までの数字とAからFまでのアルファベットの組み合わせで表現されます。それぞれの桁の数が16になると桁上がりします。10進数と比べてみた表が次のとおりです。

10進数0123456789101112131415161726313233
16進数0123456789ABCDEF10111A1F202A

16進数は日常ではあまり登場しませんが、PC上では結構な頻度で登場しています。例えば、色コードや文字コードで16進数が使われています。IPアドレスも16進数の組み合わせで表記されます。数字にA~Fが入っている場合は16進数なのかなと思っても良かもしれません。

使用例

次の例は、前半は引数に「10進数の数値」、後半は「10進数の文字列」をHex関数で16進数に変換した結果を表示します。どちらも同じ値が返っていることがわかります。

Sub Hex_test()

'数値が引数
Debug.Print Hex(1)      '"1"
Debug.Print Hex(10)     '"A"
Debug.Print Hex(15)     '"F"
Debug.Print Hex(16)     '"10"
Debug.Print Hex(31)     '"1F"
Debug.Print Hex(32)     '"20"
Debug.Print Hex(999)    '"3E7"

'数値の文字列が引数
Debug.Print Hex("1")     '"1"
Debug.Print Hex("10")   '"A"
Debug.Print Hex("15")   '"F"
Debug.Print Hex("16")   '"10"
Debug.Print Hex("31")   '"1F"
Debug.Print Hex("32")   '"20"
Debug.Print Hex("999") '"3E7"

End Sub

Hex関数が返す値は「文字列」です。

おわりに

Excel VBA「Hex関数」で数値を16進数に変換する方法を紹介しました。

解説の中で、範囲外の値を指定すると「エラー 6 オーバーフローしました。」が発生しますと解説していますが、次のテストでエラーは発生しませんでした。

Dim strHex
'数値がLong型を超えた場合
strHex = Hex(2147483647) '"7FFFFFFF"
strHex = Hex(2147483648#) '"80000000"
strHex = Hex(2147483649#) '"80000001"
strHex = Hex(2147483649999#) '"1F4000007CF"

Long型(4バイト)で表現できる数字は -2,147,483,648 ~ 2,147,483,647 です。最初だけは範囲内です。範囲外を指定した場合、末尾に「#」が付加されています。そして、エラーにならずに結果が返ってきました。この「#」は As Double と同じ意味で、リテラル文字で数値にDouble型が指定されたことを表しています。

変数の型+リテラル文字
Integer数値%
Long数値&
Single数値!
Double数値#
Currency数値@

何故エラーにならなかったのかは不明ですが、Doubleが指定されているという明示なのだと思います。実行環境によってオーバーフローにならない場合があるのでしょう。本来はエラーになるものですから注意が必要です!

解説はここまでにします。少しでもみなさまのお役に立てたなら幸いです(^^;

関数一覧はこちらです。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルはダウンロードできます

このページで使用したサンプルファイルの登録はありません(^^;

ダウンロードページへトップリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!