Excel TIPS/16進数による計算

 Excelのワークシート関数に16進数を扱うものは用意されていませんが、VBAを使えば、処理は至って簡単です。
 というのは、VBAには16進数で表示する方法と、16進数を10進数に変換する関数が用意されているのです。

 これを使うためには、次のコードを標準モジュールに書いておけば十分です。もちろん、特定のブックのモジュールに入れてもいいのですが、常日頃から使うなら、やはり個人用マクロブックこと Personal.xls に入れておくのが便利です。

10進数を16進数に変換
Function Dec2Hex(Dec As Long) As String
    Dec2Hex = Hex(Dec)
End Function
16進数を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進数にしないと演算できないなんて。
 すごく回り道をしている気になるけれど、他に方法がなければしようがありませんかねえ。

Copyright(C) 魔術幻燈, 2000
poetlabo@cap.bekkoame.ne.jp

Excel TIPS | FAQ 目次に戻る