情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

Excelで40bit(10文字)以上の16進数を10進数に変換する方法 このエントリーを含むはてなブックマーク

HEX2DEC

Excel 2010には「HEX2DEC」という16進数を10進数に変換する関数があります。しかし、この関数の引数のヘルプには

必ず指定します。変換する 16 進数を文字列として指定します。数値に指定できる文字数は 10 文字 (40 ビット) までです。数値の最上位のビットは符号を表し、残りの 39 ビットは数値の大きさを表します。負の数は 2 の補数を使って表します。

と書かれています。つまり、10文字(40bit)より長い16進数を変換することは出来ません。また、最上位ビットが符号を表す点に注意しなければなりません。そこで、今回はまず160bit(40文字)の符号ビットのない16進数を、一つのセルに関数を書いて変換してみます。

HEX2DEC 160bit版

方法は簡単で、8文字(32bit)ずつの5カ所に区切って計算するだけです。その8文字を切り出す際には「MID関数」を利用します。A1に160bitの10進数が入っているとき、次のようになります。

=HEX2DEC(MID(A1,8*0+1,8))*16^(8*4)
+HEX2DEC(MID(A1,8*1+1,8))*16^(8*3)
+HEX2DEC(MID(A1,8*2+1,8))*16^(8*2)
+HEX2DEC(MID(A1,8*3+1,8))*16^(8*1)
+HEX2DEC(MID(A1,8*4+1,8))*16^(8*0)

長くなってしまいましたが、単純です。

HEX2DEC 160bit以下版

ただし、A1に40文字以下の16進数が入っていると、これは左から読み取ってしまい、値がずれてしまうので、その場合を考慮してみます。実はMID関数は、文字のないところを参照しようとしてもエラーにならず、「MID("aaa",3,10)」は"a"、「MID("a",100,100)」は""(空文字列)になります。そこを利用すると

=HEX2DEC(MID(A1,40-8*1+1,8))*16^(8*0)
+HEX2DEC(MID(A1,40-8*2+1,8))*16^(8*1)
+HEX2DEC(MID(A1,40-8*3+1,8))*16^(8*2)
+HEX2DEC(MID(A1,40-8*4+1,8))*16^(8*3)
+HEX2DEC(MID(A1,40-8*5+1,8))*16^(8*4)

特に整理していないので、もっとわかりやすくできると思います。ちなみに、このように文字が短い場合にも正しく動作するように変更したので、現在この関数は160bit以下の16進数を変換できるようになっており、このまま関数を長くすれば、もっと長いビット数にも対応できます。

Excel VBAのプログラミングのツボとコツがゼッタイにわかる本―最初からそう教えてくれればいいのに!
Excel 完全制覇パーフェクトシリーズ←おすすめ
Excel パーフェクトマスターシリーズ

Excel | コメント:0 | トラックバック:0 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

この記事のコメント

コメントの投稿 エントリの新旧に関わらず、極力18時間中に返信します。














この記事のトラックバック

トラックバックURL:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。