進数変換リンク

他のn進数からn進数への変換は以下をご参照ください。

VBAで2進数から8進数へ変換する
VBAで2進数から10進数へ変換する
VBAで2進数から16進数へ変換する
VBAで8進数から2進数へ変換する
VBAで8進数から10進数へ変換する
VBAで8進数から16進数に変換する
VBAで10進数から2進数へ変換する
VBAで10進数から8進数へ変換する
VBAで10進数から16進数へ変換する
VBAで16進数から2進数へ変換する
VBAで16進数から8進数へ変換する
VBAで16進数から10進数へ変換する


16進数から2進数へ変換する考え方

16進数から2進数への変換は、一度10進数に変換してからそれを2進数に変換する、二段階に分けて変換する方法を行います。

16進数から10進数への変換は、16進数文字列を「”&H1A”」のように頭に”&H”を付けて、それをVal関数で渡すことで変換できます。

10進数から2進数への変換は「VBAで10進数から2進数へ変換する」で紹介している変換関数の「DecToBin」を利用します。

実は、16進数から直接2進数に変換する方法を検討した際に、10進数へ変換せずに直接変換する方法を検討していました。

その方法は、16進数の0からFに対応する2進数の”0000″から”1111″の対応配列や対応マップを用意して変換する方法で、いくつかコードを書いて試してみたのですが、結局は二段階に分けた方が一番高速でした。


16進数から2進数に変換する関数

以下の関数は、第一引数に変換元となる16進数文字列を指定して実行すると、第二引数に変換後の2進数文字列が設定されます。

例えば第一引数に”1B”とセットした場合は第二引数に”11011″がセットされて関数が終了します。

上にも書いていますが、10進数から2進数への変換は「VBAで10進数から2進数へ変換する」で紹介しているコードです。DecToBin()の詳細は紹介ページをご参照ください。


使い方

16進数文字列をいくつか持つ配列を作って、ループでHexToBin関数を呼び出し、変換結果をイミディエイトウィンドウに出力するサンプルです。

実行結果
FFf 111111111111
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111
10 10000
11 10001
12 10010
13 10011
14 10100
15 10101
16 10110
17 10111
18 11000
19 11001
1A 11010
1B 11011
1C 11100
1D 11101
1E 11110
1F 11111
20 100000
21 100001
22 100010
23 100011
24 100100
25 100101