16進数同士の計算は10進数に変換してから行う

VBAでは16進数同士を計算する場合、16進数のままでは直接計算できません。

そのため、まず16進数から10進数に変換を行ってから計算し、計算結果を16進数に戻す方法になります。

このページでは、16進数同士の足し算と引き算を行う方法を、サンプルコード付きで解説します。

なお、16進数から10進数に変換するコード、および、10進数から16進数に変換するコードは以下のページのものを編集して利用しています。詳細は以下をご参照ください。

なぜ16進数を直接計算できないのか?

VBAは数値を10進数で扱うことが基本です。

16進数の値は文字列として表現されることが多く、そのまま計算すると文字列の連結になってしまいます。

そのため、まずは16進数文字列を10進数に変換して計算し、計算結果をまた16進数に戻すという流れが必要です。

16進数の足し算・引き算を行う関数

HexToDec関数とDecToHex関数のコードは上のリンクをご参照ください。

コードの内容はコメントにほとんど書いていますが、少し補足すると、加算のHexAdd関数と減算のHexMinusの違いはコードの途中の「加算」か「減算」かの部分しかありません。

HexToDec関数が16進数文字列を10進数文字列に変換するため、それに合わせて「10進数文字列」にしていますが、HexToDec関数を編集してDouble型を直接扱うようにしてもよいと思います。

使い方

HexAdd関数とHexMinus関数の使い方の例です。第一引数と第二引数に16進数文字列を渡し、第三引数で計算結果を受け取ります。

あまり注意しなくてもいい注意点

16進数を扱うときは負数(マイナス値)を扱うことはかなり少ないのですが、もし負数を扱う場合はVBAのHex関数では正しく扱えません。

VBAのHex関数は負数を補完付き2進数(2の補数)で扱わず、桁数オーバーを起こす可能性があるため、負数を扱いたい場合は、符号付きビット演算やAPIを使う必要があります。この記事では割愛します。面倒なので。