Excelのワークシート関数に16進数を扱うものは用意されていませんが、VBAを使えば、処理は至って簡単です。
というのは、VBAには16進数で表示する方法と、16進数を10進数に変換する関数が用意されているのです。
これを使うためには、次のコードを標準モジュールに書いておけば十分です。もちろん、特定のブックのモジュールに入れてもいいのですが、常日頃から使うなら、やはり個人用マクロブックこと Personal.xls に入れておくのが便利です。
10進数を16進数に変換Function Dec2Hex(Dec As Long) As String Dec2Hex = Hex(Dec) End Function16進数を10進数に変換Function Hex2Dec(Hex As String) As Long Hex2Dec = Val("&H" & Hex) End Function
10進数は数値として扱えるのに対し、16進数は文字列となることに注意してください。そういえぱ、同じようなことをするアドインがありますが、その中身はこれと同じではないかと思います。
では、変換処理ではなく、直接16進数による計算を! と思うことでしょう。VBAコード内に直接書き込めば、計算可能です。
ちょっと試してみましょう。
16進数表示による演算の例Sub TestHex() MsgBox Hex(&Ha + &Hd) End Sub
これを標準モジュールに貼りつけて動かすと、おお! 成功です。Excel 95 では、なぜか &H が &h に勝手に換えられたりはしていますが。
これで見通し明るくなった、と喜ぶと実はこれが早とちりでした。あろうまいことか、ここでは変数が使えないのです。
16進数表示による演算ができない例Sub TestHex() MsgBox Hex(("&H" & "a") + ("&H" & "d")) End Sub
たったこれだけのことで、『型が違う』と怒られてしまいます。なぜだ? Hex() を外して
16進数表示による演算ができない例Sub TestHex() MsgBox ("&H" & "a") + ("&H" & "d") End Sub
としてみたところ、"&Ha&Hd" と返されてしまいました。後から &H をくっつけたものは、16進数表示とは看做されないようです。
いろいろ試して見ましたが、結局この場合、直接演算はダメで、一度 Val() を使って変換しなければならないようです。
変換した上で演算させる例 …何だかなあSub TestHex() MsgBox Hex(Val("&H" & "a") + Val("&H" & "d")) End Sub
ちなみに、 Val() は10進数を吐く関数です。どうせ計算機内部では10進数なんて使っていないくせに、一々10進数にしないと演算できないなんて。
すごく回り道をしている気になるけれど、他に方法がなければしようがありませんかねえ。