この記事で分かること
- 16進数のデータを10進数・2進数に変換する関数(HEX2DEC・HEX2BIN)
- 変換した2進数から任意のビットを取り出す方法
- 上位の
0が消えて桁がずれる問題と、TEXT関数での直し方
どんな場面で使うか
PLCなどでIOデータをログに取って解析するとき、16進数から10進数や2進数に変換したいときがあります。そんなときの変換・解析方法について紹介します。
例えば1ByteデータがD2と16進数で表示されているときに、以下のように変換・抽出しました。
- 10進数へ変換
- 2進数へ変換
- 各ビットの抽出
- 再度結合

HEX・DEC・BINの変換結果とビット抽出
使う関数
関数で表すとこのようになります。
- 16進数→10進数:HEX2DEC関数
- 16進数→2進数:HEX2BIN関数
- 抽出:RIGHT、LEFT、MID関数
- 連結:CONCATENATE関数

BIN関数で2進数に変換したので、*bitは右から数えたときの順番になります。 連結するときは大きい方の4bitから書くので注意が必要です。
どちらの進数で見るか
アナログデータなどでそのまま読みたい場合は10進数に変換して見やすくなりますし、IOなどのデジタルデータを扱う時は2進数に変えてビット単位で見た方が分かりやすくなります。
Wordデータを扱う場合も同様の考え方でデータを分解・解析できます。
よくあるつまずき:先頭の 0 が消えて桁がずれる
最初は8bitの先頭に1が入る時で説明をしましたが、0が来る場合には注意が必要です。 例えば、6Bのようなデータを同様に分解するとこのようになります。

赤字で書いている部分が誤っている箇所です。 8bit目が0ですが、通常Excelでは上位側の0は表示されないのでその分ずれてしまいます。
扱う単位が決まっているため、TEXT関数を使って毎回8桁表示させるようにすることで解決できます。

この結果がこちらになります。 これで先頭に0が来ても正しく値を抽出することができます。

関連記事
- 【Excel】 関数参照時に空白やエラーを除く方法 — 変換結果がエラーになるときの受け止め方
- 【Excel 関数】TEXTBEFORE・TEXTAFTER・TEXTSPLITの使い方 — 区切り文字で文字列を分割する — 文字列を位置で切り出す新しい書き方
サンプルはこちら 【Excel】 サンプル公開

