【Excel】進数変換のやり方 — 16進数を10進数・2進数に変換してビットを抽出する

Excel
この記事は約6分で読めます。

この記事で分かること

  • 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進数に変換する

  1. 「ログ」シートの B2 を選ぶ
  2. 次の数式を入力して、B7 までコピーする
=HEX2DEC(A2)

B2:B7にHEX2DECで10進数が入った状態

D2 は210、FF は255 になります。

2. 16進数を8桁の2進数に変換する

  1. C2 を選ぶ
  2. 次の数式を入力して、C7 までコピーする
=HEX2BIN(A2,8)

C2:C7にHEX2BINで8桁の2進数が入った状態。6Bは01101011

6B は 01101011 と、先頭の0を残した8桁になります。

2つ目の引数 8 が大事です。省くと 1101011 の7桁になり、次の手順でビットがずれます。

3. 2進数から1ビットずつ取り出す

  1. D2 を選ぶ
  2. 次の数式を入力する
  3. 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)

関連記事

サンプルファイル

記事中で使用しているサンプルデータはこちらからダウンロードできます。

タイトルとURLをコピーしました