ExcelのHEX2OCT関数の使い方|16進数を8進数に変換する方法とエラー対策

スポンサーリンク

「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進数
3B4E1518235516

よく使う変換例をまとめておきます。

入力(16進数)出力(8進数)10進数備考
000 
7778進数1桁の最大値
81088進数の桁上がり
A1210 
F171516進数1桁の最大値
1F3731 
FF377255 
3B4E3551615182 
1FFFFFFF3777777777536870911正の最大値

セル参照で変換する

セルの値を参照して変換することもできます。A1に「1A」が入っているとします。

=HEX2OCT(A1)

結果は「32」です。参照先の値を変えれば結果も自動で更新されます。複数の値をまとめて変換したいときに活用してみてください。

桁数を指定してゼロ埋めする

第2引数に桁数を指定すると、先頭にゼロを埋めて桁数を揃えられます。

=HEX2OCT("F", 3)

結果は「017」です。3桁に揃えてくれました。

桁数を指定しない場合と比べてみましょう。

数式結果備考
=HEX2OCT(“F”)17最小桁数(2桁)
=HEX2OCT(“F”, 3)0173桁にゼロ埋め
=HEX2OCT(“F”, 5)000175桁にゼロ埋め
=HEX2OCT(“A”)12最小桁数(2桁)
=HEX2OCT(“A”, 4)00124桁にゼロ埋め

桁揃えを行うとデータの見た目が整い、比較しやすくなりますよ。

HEX2OCT関数の応用例

負の数を変換する(2の補数)

HEX2OCT関数に負の数を表す16進数を指定すると、2の補数(にのほすう)で表現された10桁の8進数が返ります。

2の補数とは、コンピュータが負の整数を表す仕組みです。最上位ビットが「1」なら負の数を意味します。

=HEX2OCT("FFFFFFFFFF")

結果は「7777777777」です。これは10進数の-1に相当します。

NOTE

負の数を変換する場合、桁数(第2引数)を指定しても無視されます。常に10桁の8進数が返されます。

負の数の代表的な変換例です。

入力(16進数)出力(8進数)10進数備考
FFFFFFFFFF7777777777-1全桁が最大値
FFFFFFFFFE7777777776-2 
FFFFFFFF007777777400-256 
FFE00000004000000000-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”)755rwxr-xr-x
1A4=HEX2OCT(“1A4”)644rw-r–r–
1FF=HEX2OCT(“1FF”)777rwxrwxrwx

パーミッション管理の場面で、ぜひ活用してみてください。

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関数は逆変換の関係です。

関数変換方向入力出力
HEX2OCT16進数 → 8進数0〜Fの文字列(最大10桁)8進数テキスト(最大10桁)
OCT2HEX8進数 → 16進数0〜7の文字列(最大10桁)16進数テキスト(最大10桁)

使いどころを整理します。

  • HEX2OCT: 16進数のデータを8進数(3ビット単位)で確認したいとき
  • OCT2HEX: 8進数のパーミッション値を16進数に変換したいとき

HEX系関数の比較

Excelには16進数を他の進数に変換するHEX系関数が3つあります。

関数変換先出力範囲(10進数)
HEX2BIN2進数-512〜511(10桁)
HEX2OCT ※この記事8進数-536870912〜536870911(10桁)
HEX2DEC10進数約-5,497億〜約5,497億

HEX2BINは10桁でも10ビットしかないため、入力範囲が狭めです。HEX2OCTは10桁で30ビットなので、かなり広い範囲を扱えますよ。

進数変換関数の一覧

Excelの進数変換関数は全部で12種類あります。関数名の規則は「変換元 + 2 + 変換先」です。

関数名変換方向
BIN2DEC2進数 → 10進数
BIN2HEX2進数 → 16進数
BIN2OCT2進数 → 8進数
DEC2BIN10進数 → 2進数
DEC2HEX10進数 → 16進数
DEC2OCT10進数 → 8進数
HEX2BIN16進数 → 2進数
HEX2DEC16進数 → 10進数
HEX2OCT ※この記事16進数 → 8進数
OCT2BIN8進数 → 2進数
OCT2DEC8進数 → 10進数
OCT2HEX8進数 → 16進数

この命名規則を覚えておけば、どの関数を使えばいいか迷いませんよ。

まとめ

HEX2OCT関数は、16進数を8進数に変換する関数です。

ポイントを整理します。

  • 構文は =HEX2OCT(数値, [桁数]) の最大2引数
  • 変換できる範囲は10進数で-536870912〜536870911
  • 桁数を指定すると先頭をゼロで埋めて桁揃えできる
  • 負の数は10桁の2の補数で返される(桁数指定は無視)
  • UNIXパーミッションの確認に便利
  • #NUM!エラーは「範囲外」「桁数不足」「無効な文字」が原因
  • #VALUE!エラーは桁数引数に数値以外を指定した場合
  • 逆変換にはOCT2HEX関数を使う
  • Excel 2016以降で標準搭載。アドイン不要

まずは =HEX2OCT("FF") で「377」が返ることを試してみてください。

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