この記事で分かること
- 16進数を10進数に変換する
=HEX2DEC(A2) - 16進数を8桁の2進数に変換する
=HEX2BIN(A2,8) - 2進数から1ビットずつ取り出す数式
- 16ビットのデータで
#NUM!になるときの直し方

完成形(「完成」シートのA1:K7)。16進数を10進数・8桁の2進数に変換し、ビット7〜0に分けた表
結論: 16進数を10進数にするなら =HEX2DEC(A2)、2進数にするなら =HEX2BIN(A2,8) です。
どんな場面で使うか
- PLCや計測器のログに、IOの状態が
D2のような16進数で残っている - どの入力がONだったかを、ビット単位で確かめたい
- アナログ値を、読める10進数の数字に直したい
アナログ値は10進数、ON/OFFの信号は2進数に直すと読みやすくなります。
基本説明
サンプルの「ログ」シートを使います。A列に1バイト(8ビット)の16進数が6件あります。

「ログ」シートの元データ(A1:K7)。A2:A7に16進数、1行目に見出しとビット番号7〜0
D1:K1 の数字は、ビットの番号です。右端の K列が0番(一番下の桁)です。
使う関数は次の3つです。
| やりたいこと | 関数 | 例 | 結果 |
|---|---|---|---|
| 16進数 → 10進数 | HEX2DEC(数値) |
=HEX2DEC("D2") |
210 |
| 16進数 → 2進数 | HEX2BIN(数値, 桁数) |
=HEX2BIN("6B",8) |
01101011 |
| 1文字を取り出す | MID(文字列, 開始位置, 文字数) |
=MID("01101011",1,1) |
0 |
手順
1. 16進数を10進数に変換する
- 「ログ」シートの B2 を選ぶ
- 次の数式を入力して、B7 までコピーする
=HEX2DEC(A2)

B2:B7にHEX2DECで10進数が入った状態
D2 は210、FF は255 になります。
2. 16進数を8桁の2進数に変換する
- C2 を選ぶ
- 次の数式を入力して、C7 までコピーする
=HEX2BIN(A2,8)

C2:C7にHEX2BINで8桁の2進数が入った状態。6Bは01101011
6B は 01101011 と、先頭の0を残した8桁になります。
2つ目の引数 8 が大事です。省くと 1101011 の7桁になり、次の手順でビットがずれます。
3. 2進数から1ビットずつ取り出す
- D2 を選ぶ
- 次の数式を入力する
- D2 を K2 までコピーし、D2:K2 をまとめて7行目までコピーする
=MID($C2,8-D$1,1)

D2:K7にMIDで1ビットずつ取り出した0と1が入った状態
ビット7は左から1文字目、ビット0は8文字目です。8-ビット番号 で何文字目かを計算しています。
$C2 は列だけ、D$1 は行だけ固定しています。こうすると、右にも下にもそのままコピーできます。
16ビット(Word)のデータを変換する
PLCのデータレジスタのように、ABCD のような4桁の16進数を扱う場合です。サンプルの「Word」シートで確かめます。

「Word」シートのA1:E4。HEX2BINは#NUM!、BASEは16桁の2進数、右端は符号付きの値
HEX2BIN は511(16進数の 1FF)までしか変換できません。16ビットのデータは #NUM! になります。
16桁の2進数には、BASE関数を使います。
=BASE(B2,2,16)
B2 は =HEX2DEC(A2) の結果です。2 は2進数、16 は桁数です。
ビットを取り出すときは、手順3の数式の 8 を 16 に、$C2 を16桁の列に変えます。
マイナスの値として読む
16ビットの値をマイナスも含めて扱う(符号付き)場合は、次の数式で直します。
=IF(B2>=32768,B2-65536,B2)
FFFF は65535 ではなく -1、ABCD は -21555 になります。
逆方向の変換
| やりたいこと | 数式 | 結果 |
|---|---|---|
| 10進数 → 16進数 | =DEC2HEX(210) |
D2 |
| 2進数 → 10進数 | =BIN2DEC("11010010") |
210 |
| 2進数 → 16進数 | =BIN2HEX("11010010") |
D2 |
| 10進数 → 2進数(16桁) | =BASE(43981,2,16) |
1010101111001101 |
よくあるエラー
HEX2BIN が #NUM! になる
原因: 値が511(1FF)を超えています。16ビットのデータはここに当たります。
直し方: =BASE(HEX2DEC(A2),2,16) に置き換えます。
ビットが1つずつずれる
原因: HEX2BIN の2つ目の引数(桁数)を省いています。先頭の0が消えて、桁が足りなくなります。
直し方: =HEX2BIN(A2,8) のように桁数を指定します。
1E3 のようなデータが 1.00E+03 になる
原因: 数字の間に E があると、Excelが指数(1×10³)として読み込みます。
直し方: セルの表示形式を先に「文字列」にしてから入力するか、先頭に ' を付けて '1E3 と入力します。
BASE が #NAME? になる
原因: BASE関数は Excel 2013 から使えます。それより前の版にはありません。
直し方: 上位と下位の1バイトに分けて、=HEX2BIN(LEFT(A2,2),8)&HEX2BIN(RIGHT(A2,2),8) でつなぎます。
まとめ
- 16進数 → 10進数は
=HEX2DEC(A2) - 16進数 → 2進数は
=HEX2BIN(A2,8)。桁数を付けて先頭の0を残す - ビットは
=MID($C2,8-D$1,1)で1つずつ取り出せる - 16ビットのデータは
=BASE(HEX2DEC(A2),2,16)
関連記事
- 【Excel】 関数参照時に空白やエラーを除く方法 — 変換結果がエラーになるときの受け止め方
- 【Excel 関数】TEXTBEFORE・TEXTAFTER・TEXTSPLITの使い方 — 区切り文字で文字列を分割する — 文字列を位置で切り出す新しい書き方
サンプルファイル
記事中で使用しているサンプルデータはこちらからダウンロードできます。

