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

スポンサーリンク

「8進数のデータを16進数に変換したいけど、手計算は大変…」

Excelで8進数から16進数への変換が必要になる場面は意外とあります。手計算だと一度10進数を経由する必要があり、ミスしやすいですよね。

そんなときに便利なのがOCT2HEX関数です。8進数を入力するだけで、16進数に一発変換してくれます。桁数を揃える機能もあるので、データの見た目を統一したいときにも役立ちます。

この記事では、OCT2HEX関数の使い方からエラー対策、逆変換や関連関数との使い分けまで解説します。

ExcelのOCT2HEX関数とは?読み方と概要

OCT2HEX関数は、8進数を16進数に変換するExcelの関数です。

8進数は0から7までの数字で数を表す方法です。16進数は0から9とAからFの16種類の文字で数を表します。

OCT2HEX関数を使えば、この変換を自動で行えます。

読み方と「OCT→HEX」の意味

読み方は「オクタル・ツー・ヘキサデシマル」です。

  • OCT = Octal(オクタル、8進数)
  • 2 = to(〜へ)
  • HEX = Hexadecimal(ヘキサデシマル、16進数)

つまり「8進数から16進数へ」という意味です。関数名がそのまま機能を表しています。

どんな場面で使う?

OCT2HEX関数は、次のような場面で使います。

  • Unixファイルパーミッション(755など)を16進数形式で記録する
  • IoTセンサーや通信機器の8進数データを16進数に変換する
  • メモリアドレスやカラーコードの形式に合わせて変換する
  • 進数変換の学習や検算に使う

特にメモリアドレスの表記変換は実務でよくある用途です。

対応バージョンは次のとおりです。

バージョン対応状況
Excel 2007以降標準搭載(そのまま使える)
Excel 2003以前分析ツールアドインの有効化が必要
Microsoft 365対応(Windows / Mac / Web)

NOTE

現在使われているほとんどのExcelで、追加設定なしで利用できます。

OCT2HEX関数の構文と引数

基本構文は次のとおりです。

=OCT2HEX(数値, [桁数])

引数は「数値」と「桁数」の2つです。桁数は省略できます。

引数必須/任意説明
数値必須16進数に変換したい8進数を指定する
桁数任意結果の文字数を指定する。省略すると最小桁数で表示

第1引数:数値

数値には、8進数として有効な値を指定します。指定ルールは次のとおりです。

  • 使える文字は「0」から「7」のみ
  • 最大10桁(10文字)まで指定できる
  • 直接入力でもセル参照でも指定できる

0から7以外の文字を含めるとエラーになります。「8」「9」「A」などは8進数では使えません。

WARNING

最上位ビット(10桁目)は符号ビットです。最上位桁が4以上の場合は負の数として扱われます。これは2の補数(コンピュータで負の数を表す仕組み)による表現です。

第2引数:桁数(省略可)

桁数を指定すると、結果の文字数を揃えられます。不足分は先頭に「0」が追加されます。

=OCT2HEX(100, 4)

結果は「0040」です。省略した場合は「40」とだけ表示されます。

桁数の指定ルールは次のとおりです。

  • 正の整数で指定する
  • 小数を指定した場合は小数点以下が切り捨てられる
  • 結果の桁数より小さい値を指定すると#NUM!エラー
  • 負の数を変換した場合は桁数に関係なく10桁で返される

TIP

桁数指定は表を作るときに便利です。「桁数: 4」を指定すれば、「7」も「0007」と表示できますよ。

入力できる値の範囲

OCT2HEX関数が扱える値の範囲は次のとおりです。

区分8進数の範囲16進数での値10進数での値
正の数0 〜 37777777770 〜 1FFFFFFF0 〜 536,870,911
負の数4000000000 〜 7777777777FFE0000000 〜 FFFFFFFFFF-536,870,912 〜 -1

正の数は最上位桁が0〜3、負の数は最上位桁が4〜7です。この範囲外の値を指定すると#NUM!エラーになります。

OCT2HEX関数の使い方(基本例)

基本的な変換例

まずはシンプルな例からです。セルに直接入力してみましょう。

=OCT2HEX(53)

結果は「2B」です。8進数の53は、16進数の2Bに対応します。

変換の仕組みを確認しておきましょう。まず8進数を10進数に変換し、それを16進数にします。

ステップ計算結果
8進数 → 10進数5×8 + 3 = 4343
10進数 → 16進数43 = 2×16 + 11(B)2B

この変換を途中の10進数を挟まずにワンステップで処理してくれるのがOCT2HEX関数の便利なところです。

セル参照も使えます。A1に「100」(8進数)が入っているとします。

=OCT2HEX(A1)

結果は「40」です。8進数の100は10進数で64、16進数では40です。

なお、8進数から一度10進数に変換したい場合はOCT2DEC関数を使います。

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

入力(8進数)出力(16進数)10進数での値
111
777
1088
17F15
201016
1004064
14464100
7771FF511

桁数を指定して0埋めする方法

桁数を指定すると、結果の表示を揃えられます。

=OCT2HEX(7, 4)

結果は「0007」です。4桁になるように先頭に「0」が追加されます。

桁数指定はデータの一覧表を作るときに便利です。桁数がバラバラだと見づらいですよね。

数式結果説明
=OCT2HEX(1, 4)00014桁に揃える
=OCT2HEX(100, 4)00404桁に揃える
=OCT2HEX(777, 8)000001FF8桁に揃える

TIP

桁数を揃えておくと、VLOOKUP関数やFILTER関数での照合もしやすくなります。データ管理の観点でも桁数指定はおすすめです。

負の数(補数表現)を変換する場合

OCT2HEX関数は「2の補数」表現にも対応しています。

2の補数とは、コンピュータで負の数を表す仕組みです。8進数の最上位桁が4以上の場合、負の数として扱われます。

=OCT2HEX(7777777777)

結果は「FFFFFFFFFF」です。8進数の7777777777は、10進数では-1に対応します。出力は10桁の16進数です。

=OCT2HEX(7777777533)

結果は「FFFFFFFF5B」です。これは10進数で-165に対応します。

NOTE

負の数を入力するときは8進数の2の補数形式で指定します。「-」記号を付けるとエラーになりますのでご注意ください。

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

入力(8進数)出力(16進数)10進数での値
7777777777FFFFFFFFFF-1
7777777776FFFFFFFFFE-2
7777777760FFFFFFFFF0-16
4000000000FFE0000000-536,870,912

負の数の場合は桁数を指定しても常に10桁で返されます。桁数引数は無視されるので注意してください。

OCT2HEX関数のエラーと対処法

OCT2HEX関数で発生するエラーと対処法を表にまとめました。

エラー原因数式の例対処法
#NUM!0〜7以外の文字を含む=OCT2HEX(89)0〜7の数字だけで構成する
#NUM!11桁以上(10文字超)の数値を指定した=OCT2HEX(77777777777)数値は10桁以内にする
#NUM!桁数に負の数を指定した=OCT2HEX(100, -1)桁数は正の整数で指定する
#NUM!結果が指定桁数を超える=OCT2HEX(777, 1)桁数を大きくするか省略する
#VALUE!桁数に数値以外を指定した=OCT2HEX(100, “A”)桁数には数値を指定する

#NUM!エラー

#NUM!エラーは4つのパターンで発生します。

パターン1: 8進数以外の値を入力した

=OCT2HEX(89)

「8」「9」は8進数では使えない文字です。この数式は#NUM!エラーになります。入力値が0〜7の数字だけか確認しましょう。

パターン2: 数値が10桁を超えている

=OCT2HEX(77777777777)

OCT2HEX関数が処理できる数値は最大10桁(10文字)です。11桁以上の8進数を入力すると#NUM!エラーになります。入力値が10桁以内か確認しましょう。

パターン3: 桁数に負の数を指定した

=OCT2HEX(100, -1)

桁数は正の整数で指定する必要があります。負の数を指定すると#NUM!エラーです。

パターン4: 結果が指定した桁数に収まらない

=OCT2HEX(777, 1)

8進数の777は16進数で「1FF」(3桁)です。桁数を1に指定すると収まりません。桁数を3以上にするか、省略すれば解消します。

#VALUE!エラー

#VALUE!エラーは、桁数引数に数値として解釈できない値を指定した場合に発生します。

=OCT2HEX(100, "ABC")

この数式は#VALUE!エラーになります。桁数には数値を指定してください。

IFERROR関数でエラーを処理する方法

大量のデータを一括変換するときは、エラーが混ざると困りますよね。IFERROR関数(エラー時に代わりの値を返す関数)と組み合わせれば、エラー表示を回避できます。

=IFERROR(OCT2HEX(A1), "変換エラー")

この数式なら、A1の値が不正でもエラー表示にはなりません。「変換エラー」という文字列が代わりに表示されます。

空文字を返したい場合は次のように書きます。

=IFERROR(OCT2HEX(A1), "")

エラーのセルが空白になるので、見た目がすっきりします。

HEX2OCT関数との逆変換の使い分け

OCT2HEX関数の逆方向の変換を行うのがHEX2OCT関数です。

関数変換方向引数
OCT2HEX8進数 → 16進数数値, [桁数](2つ)
HEX2OCT16進数 → 8進数数値, [桁数](2つ)

両方を組み合わせると、変換の検算ができます。

=HEX2OCT(OCT2HEX(A1))

A1の8進数を16進数に変換し、再び8進数に戻します。元の値と一致すれば変換が正しいと確認できます。

逆方向の検算もやってみましょう。

=OCT2HEX(HEX2OCT(B1))

B1の16進数を8進数に変換し、再び16進数に戻します。こちらも元の値と一致すればOKです。

TIP

大量の変換データがあるときは、隣の列に検算用の数式を入れておくと安心です。元の値と一致しない行があれば、入力ミスをすぐに見つけられますよ。

関連する進数変換関数との使い分け

OCT2BIN・OCT2DECとの比較

8進数を変換する関数は3つあります。変換先が異なるだけで、入力ルールは共通です。

関数名変換先桁数引数出力例(入力: 53)
OCT2BIN2進数あり101011
OCT2DEC10進数なし43
OCT2HEX16進数あり2B

ポイントはOCT2DECだけ桁数引数がない点です。10進数には「0埋め」の概念がないためです。

同じ8進数「53」を3つの関数で変換すると次のようになります。

=OCT2BIN(53)   → 101011
=OCT2DEC(53)   → 43
=OCT2HEX(53)   → 2B

3つの関数を並べれば、1つの8進数を複数の進数で一覧表示できます。

16進数・10進数からの変換関数

16進数からの変換が必要な場合は、以下の関数を使います。

関数名変換方向用途
HEX2DEC16進数 → 10進数16進数データを通常の数値に戻す
HEX2BIN16進数 → 2進数16進数をビット列で確認する
HEX2OCT16進数 → 8進数OCT2HEXの逆変換

10進数からの変換が必要な場合は、以下の関数を使います。

関数名変換方向用途
DEC2BIN10進数 → 2進数通常の数値を2進数で表示
DEC2OCT10進数 → 8進数通常の数値を8進数で表示
DEC2HEX10進数 → 16進数通常の数値を16進数で表示

たとえば、8進数データをまず10進数にしてから16進数に変換したい場合は、OCT2DEC関数DEC2HEX関数を組み合わせることもできます。ただし、OCT2HEX関数なら1つの数式で直接変換できるので、通常はOCT2HEXを使うほうが効率的です。

Excelの進数変換関数一覧(全12関数)

Excelには進数変換関数が全部で12個あります。関数名の命名規則は「変換元の略称 + 2 + 変換先の略称」です。

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

この命名規則を覚えておけば、どの関数がどの変換をするか迷いません。

まとめ

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

ポイントを整理します。

  • 構文は =OCT2HEX(数値, [桁数]) で、桁数は省略可能
  • 入力は0〜7の数字で構成された8進数(最大10桁)
  • 正の数は3777777777(10進数で536,870,911)まで変換できる
  • 桁数を指定すると先頭に0を追加して表示を揃えられる
  • 負の数は2の補数形式で指定し、結果は常に10桁
  • #NUM!エラーは「8進数以外の文字」「10桁超」「桁数に負の数」「桁数不足」が原因
  • #VALUE!エラーは桁数に数値以外を指定した場合に発生
  • 逆変換にはHEX2OCT関数を使う
  • Excel 2007以降で標準搭載。アドイン不要

まずは =OCT2HEX(53) で「2B」が返ることを試してみてください。

進数変換の他の関数も使いたい場合は、OCT2DEC関数(8進数→10進数)やDEC2HEX関数(10進数→16進数)もあわせてチェックしてみてくださいね。

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