「16進数を8進数に変換したいけど、手計算だと桁の対応がややこしい…」
Excelには、この変換を一発で行える関数があります。それがHEX2OCT関数です。
UNIXのファイルパーミッション確認やビット境界の変換など、16進数と8進数を行き来する場面は意外とあります。でも桁の対応が4ビットと3ビットで揃わないので手計算は面倒ですよね。
この記事では、ExcelのHEX2OCT関数の基本からエラー対策まで解説します。
ExcelのHEX2OCT関数とは
HEX2OCT関数は、16進数を8進数に変換するExcelの関数です。
16進数は「0〜9」と「A〜F」の16種類の文字で数を表す方法です。一方、8進数は「0〜7」の8種類の数字で数を表します。
16進数の1桁は4ビット(2進数4桁)に対応します。8進数の1桁は3ビット(2進数3桁)です。ビット幅が異なるため手計算では一度2進数を経由する必要があります。HEX2OCT関数を使えば、この変換を自動で行えますよ。
関数名の読み方と意味(Hexadecimal to Octal)
読み方は「ヘックス・ツー・オクタル」です。
- HEX = Hexadecimal(ヘクサデシマル、16進数)
- 2 = to(〜へ)
- OCT = Octal(オクタル、8進数)
つまり「16進数から8進数へ」という意味です。関数名がそのまま機能を表しているので覚えやすいですよ。
どんなときに使うか(8進数変換の実務ユースケース)
HEX2OCT関数は次のような場面で活躍します。
- UNIXのファイルパーミッション(chmod 755など)を16進数から確認したいとき
- 16進数のデータを3ビット単位で区切って解析したいとき
- レジスタ値やメモリダンプを8進数表記で確認したいとき
- 情報処理試験の勉強で進数変換を練習したいとき
Excel 2016以降は標準搭載されています。アドインの追加は不要です。
HEX2OCT関数の構文と引数
基本構文は次のとおりです。
=HEX2OCT(数値, [桁数])
引数は2つあります。必須なのは「数値」だけです。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 数値 | 必須 | 8進数に変換したい16進数 |
| 桁数 | 任意 | 結果の文字数を指定。先頭をゼロで埋める |
引数1:数値(必須)
8進数に変換したい16進数を指定します。
直接値を入力しても、セル参照で指定してもOKです。指定できるのは10文字までです。
大文字・小文字は区別されません。「3B4E」でも「3b4e」でも同じ結果になります。
引数2:桁数(省略可)
結果の文字数(桁数)を整数で指定します。
省略すると、変換に必要な最小限の桁数で返されます。指定すると、先頭にゼロを埋めて桁数を揃えてくれます。
たとえば =HEX2OCT("F") は「17」です。=HEX2OCT("F", 4) なら「0017」になります。桁数を揃えたい場面で便利ですよ。
NOTE
桁数に小数を指定した場合は、小数点以下が切り捨てられます。0以下の値を指定すると#NUM!エラーになります。
変換できる数値の範囲
HEX2OCT関数が変換できる範囲は限られています。
出力が8進数10桁(30ビット)までなので、入力できる16進数の範囲も制限されます。
- 正の最大値: 1FFFFFFF(10進数で536870911)→ 3777777777(8進数)
- 負の最小値: FFE0000000(10進数で-536870912)→ 4000000000(8進数)
10進数に換算すると -536870912から536870911 の範囲です。HEX2BIN関数の-512〜511と比べるとかなり広い範囲を扱えます。
HEX2OCT関数の基本的な使い方
シンプルな変換例(直接値を指定)
まずは関数に直接値を入力してみましょう。
=HEX2OCT("3B4E")
結果は「35516」です。16進数の3B4Eは、8進数で35516になります。
変換の仕組みを確認しておきます。16進数を10進数に変換し、さらに8進数に変換します。
| 16進数 | 10進数 | 8進数 |
|---|---|---|
| 3B4E | 15182 | 35516 |
よく使う変換例をまとめておきます。
| 入力(16進数) | 出力(8進数) | 10進数 | 備考 |
|---|---|---|---|
| 0 | 0 | 0 | |
| 7 | 7 | 7 | 8進数1桁の最大値 |
| 8 | 10 | 8 | 8進数の桁上がり |
| A | 12 | 10 | |
| F | 17 | 15 | 16進数1桁の最大値 |
| 1F | 37 | 31 | |
| FF | 377 | 255 | |
| 3B4E | 35516 | 15182 | |
| 1FFFFFFF | 3777777777 | 536870911 | 正の最大値 |
セル参照で変換する
セルの値を参照して変換することもできます。A1に「1A」が入っているとします。
=HEX2OCT(A1)
結果は「32」です。参照先の値を変えれば結果も自動で更新されます。複数の値をまとめて変換したいときに活用してみてください。
桁数を指定してゼロ埋めする
第2引数に桁数を指定すると、先頭にゼロを埋めて桁数を揃えられます。
=HEX2OCT("F", 3)
結果は「017」です。3桁に揃えてくれました。
桁数を指定しない場合と比べてみましょう。
| 数式 | 結果 | 備考 |
|---|---|---|
| =HEX2OCT(“F”) | 17 | 最小桁数(2桁) |
| =HEX2OCT(“F”, 3) | 017 | 3桁にゼロ埋め |
| =HEX2OCT(“F”, 5) | 00017 | 5桁にゼロ埋め |
| =HEX2OCT(“A”) | 12 | 最小桁数(2桁) |
| =HEX2OCT(“A”, 4) | 0012 | 4桁にゼロ埋め |
桁揃えを行うとデータの見た目が整い、比較しやすくなりますよ。
HEX2OCT関数の応用例
負の数を変換する(2の補数)
HEX2OCT関数に負の数を表す16進数を指定すると、2の補数(にのほすう)で表現された10桁の8進数が返ります。
2の補数とは、コンピュータが負の整数を表す仕組みです。最上位ビットが「1」なら負の数を意味します。
=HEX2OCT("FFFFFFFFFF")
結果は「7777777777」です。これは10進数の-1に相当します。
NOTE
負の数を変換する場合、桁数(第2引数)を指定しても無視されます。常に10桁の8進数が返されます。
負の数の代表的な変換例です。
| 入力(16進数) | 出力(8進数) | 10進数 | 備考 |
|---|---|---|---|
| FFFFFFFFFF | 7777777777 | -1 | 全桁が最大値 |
| FFFFFFFFFE | 7777777776 | -2 | |
| FFFFFFFF00 | 7777777400 | -256 | |
| FFE0000000 | 4000000000 | -536870912 | 負の最小値 |
逆変換のOCT2HEX関数を使えば元に戻せます。
=OCT2HEX(HEX2OCT("1F"))
結果は「1F」です。正しく往復変換できることを確認できますよ。
UNIXファイルパーミッションを確認する
HEX2OCT関数の実務での活用例として、UNIXファイルパーミッションの確認があります。
UNIXのパーミッションは9ビット(rwxrwxrwx)で表されます。8進数なら1桁が3ビットなので、ちょうど3桁で表現できます。chmodコマンドの「755」や「644」がまさに8進数表記です。
システムのログやAPIレスポンスでパーミッションが16進数で記録されている場合、HEX2OCT関数で8進数に変換できます。
=HEX2OCT("1ED")
結果は「755」です。これはrwxr-xr-x(所有者に全権限、グループと他者に読み取り・実行権限)を意味します。
代表的なパーミッションの変換例です。
| 16進数 | 数式 | 8進数 | パーミッション |
|---|---|---|---|
| 1ED | =HEX2OCT(“1ED”) | 755 | rwxr-xr-x |
| 1A4 | =HEX2OCT(“1A4”) | 644 | rw-r–r– |
| 1FF | =HEX2OCT(“1FF”) | 777 | rwxrwxrwx |
パーミッション管理の場面で、ぜひ活用してみてください。
HEX2OCT関数の#NUM!エラーと#VALUE!エラーの原因と対処法
HEX2OCT関数で発生するエラーは主に2種類です。原因別に対処法を見ていきましょう。
#NUM!エラー:数値が範囲外
変換できる範囲はFFE0000000〜1FFFFFFFです。範囲外の値を指定するとエラーになります。
=HEX2OCT("20000000") → #NUM!エラー
=HEX2OCT("FFDFFFFFFF") → #NUM!エラー
10進数で-536870912〜536870911の範囲に収まっているか確認しましょう。HEX2DEC関数で10進数に変換すると、範囲内かどうかを確かめやすいですよ。
#NUM!エラー:桁数が結果の桁数より少ない
桁数の指定が結果に必要な桁数より少ない場合もエラーです。
=HEX2OCT("FF", 2) → #NUM!エラー
FFを8進数にすると「377」で3桁必要です。桁数に2を指定すると足りないためエラーになります。桁数は結果の桁数以上を指定してください。
#NUM!エラー:数値に無効な文字が含まれている
数値に16進数として無効な文字を含む文字列を指定すると#NUM!エラーです。
=HEX2OCT("GG") → #NUM!エラー
16進数で使える文字は0〜9とA〜Fだけです。G以降のアルファベットは使えません。
#VALUE!エラー:桁数に数値以外を指定した場合
桁数(第2引数)に数値以外の文字列を指定すると#VALUE!エラーになります。
=HEX2OCT("FF", "abc") → #VALUE!エラー
桁数には整数を指定してください。セル参照を使う場合は、参照先が数値かどうかを確認しておきましょう。
IFERROR関数と組み合わせてエラーを回避する
エラーが出る可能性がある場合は、IFERROR関数(エラー時に代替値を返す関数)で囲むと安全です。
=IFERROR(HEX2OCT(A1, 3), "変換エラー")
この数式なら、A1の値が範囲外でも「変換エラー」と表示されます。大量のデータを一括変換するときに活用してみてください。
HEX2OCTと他の進数変換関数の使い分け
HEX2OCT・OCT2HEX(逆変換)の関係
HEX2OCT関数とOCT2HEX関数は逆変換の関係です。
| 関数 | 変換方向 | 入力 | 出力 |
|---|---|---|---|
| HEX2OCT | 16進数 → 8進数 | 0〜Fの文字列(最大10桁) | 8進数テキスト(最大10桁) |
| OCT2HEX | 8進数 → 16進数 | 0〜7の文字列(最大10桁) | 16進数テキスト(最大10桁) |
使いどころを整理します。
- HEX2OCT: 16進数のデータを8進数(3ビット単位)で確認したいとき
- OCT2HEX: 8進数のパーミッション値を16進数に変換したいとき
HEX系関数の比較
Excelには16進数を他の進数に変換するHEX系関数が3つあります。
| 関数 | 変換先 | 出力範囲(10進数) |
|---|---|---|
| HEX2BIN | 2進数 | -512〜511(10桁) |
| HEX2OCT ※この記事 | 8進数 | -536870912〜536870911(10桁) |
| HEX2DEC | 10進数 | 約-5,497億〜約5,497億 |
HEX2BINは10桁でも10ビットしかないため、入力範囲が狭めです。HEX2OCTは10桁で30ビットなので、かなり広い範囲を扱えますよ。
進数変換関数の一覧
Excelの進数変換関数は全部で12種類あります。関数名の規則は「変換元 + 2 + 変換先」です。
| 関数名 | 変換方向 |
|---|---|
| BIN2DEC | 2進数 → 10進数 |
| BIN2HEX | 2進数 → 16進数 |
| BIN2OCT | 2進数 → 8進数 |
| DEC2BIN | 10進数 → 2進数 |
| DEC2HEX | 10進数 → 16進数 |
| DEC2OCT | 10進数 → 8進数 |
| HEX2BIN | 16進数 → 2進数 |
| HEX2DEC | 16進数 → 10進数 |
| HEX2OCT ※この記事 | 16進数 → 8進数 |
| OCT2BIN | 8進数 → 2進数 |
| OCT2DEC | 8進数 → 10進数 |
| OCT2HEX | 8進数 → 16進数 |
この命名規則を覚えておけば、どの関数を使えばいいか迷いませんよ。
まとめ
HEX2OCT関数は、16進数を8進数に変換する関数です。
ポイントを整理します。
- 構文は
=HEX2OCT(数値, [桁数])の最大2引数 - 変換できる範囲は10進数で-536870912〜536870911
- 桁数を指定すると先頭をゼロで埋めて桁揃えできる
- 負の数は10桁の2の補数で返される(桁数指定は無視)
- UNIXパーミッションの確認に便利
- #NUM!エラーは「範囲外」「桁数不足」「無効な文字」が原因
- #VALUE!エラーは桁数引数に数値以外を指定した場合
- 逆変換にはOCT2HEX関数を使う
- Excel 2016以降で標準搭載。アドイン不要
まずは =HEX2OCT("FF") で「377」が返ることを試してみてください。
