VBAで16進数文字列かどうかを判定する

16進数文字列

Hex関数を使うと数値を16進数文字列に変換できます。

Hex(10)であれば”A”の1文字が返却され、Hex(65535)は”FFFF”の4文字が返却されます。

このように、16進数文字列は0から9とAからFで構成されています。

そして、ある文字列が本当に16進数文字列なのかを判定したい場合があります。

思いつくのはTCPやUDPなどの電文が保存されているバイナリファイルが16進数で構成されているかどうか、とかですね。

そのような場合に以下の16進数文字列関数で判定することが出来ます。

事前設定

以下のコードでは正規表現のRegExpクラスを利用しています。

そのため事前に正規表現の参照設定をしておく必要があります。

VBAの画面でツールメニュー→参照設定のダイアログを開き、「Microsoft VBScript Regular Expressions 5.5」にチェックを付けることで正規表現のRegExpクラスが利用できるようになります。

16進数文字列かどうかを判定する関数

以下のIsHex関数は引数に文字列を指定して、その文字列が16進数文字列かどうかを判定します。

16進数文字列であればTrueを返しますが、そうでない場合はFalseを返します。

大文字と小文字は区別しないようにしているため、”ABCD0123″も”abcd0123″も16進数文字列として正しく判定します。

例えば、”09EF”はTrueを返しますが、”*abc”は*が16進数文字ではないためFalseを返します。

利用例

IsHex関数の利用例です。

文字列を引数として渡し、その結果をBoolean型で受け取ります。

以下は”09EF”と”*abc”がそれぞれ16進数文字列かを判定しています。

実行結果

上のコードを実行すると以下が出力されます。

09EF True
*abc False

2つ目の「*abc」は*が16進数文字ではないためFalseが返却されています。

関連記事

サブコンテンツ

このページの先頭へ