スプレッドシートのOCT2HEX関数の使い方|8進→16進数変換

スポンサーリンク

「サーバーのパーミッション値(755とか644)を、ドキュメントに合わせて16進数表記で揃えて記録したい…」

スプレッドシートで権限管理台帳やレジスタ設定の記録を扱っていると、8進数のままでは桁が揃わなかったり、ドキュメントの16進表記と並べたときに見比べづらかったりして困りますよね。電卓で1件ずつ変換するのは、件数が増えると現実的ではありません。

そんなときに役立つのがGoogleスプレッドシートのOCT2HEX関数です。8進数の文字列を指定するだけで、16進数のテキストに変換してくれますよ。

桁数引数を指定すれば、左ゼロ埋めで「002」「01F」のように見た目を揃えられます。Excelとも互換性があるため、ファイルをやり取りする現場でも安心ですね。

この記事では、OCT2HEX関数の基本から桁数引数によるゼロ埋め・ARRAYFORMULAでの一括変換・負の数の扱い・エラー対処法まで解説します。

OCT2HEX関数とは?

OCT2HEX関数(読み方: オクト・ツー・ヘックス)は、8進数を16進数のテキストに変換するエンジニアリング関数です。Googleスプレッドシートに標準搭載されていて、追加設定なしで使えます。

8進数は0〜7の数字(合計8種類)で数値を表す方法です。一方の16進数は0〜9とA〜Fの16種類で表します。8進数3桁は10進数を経由しないと16進数に変換しづらいため、関数で一発変換できると便利ですよ。

たとえば =OCT2HEX("17") と入力すると、結果は「F」です。8進数の「17」(1×8+7=15)が16進数のF(15)と一致するとわかります。

関数名の由来

関数名を分解すると、次の意味になります。

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

つまり「OCTからHEXへ」、8進数を16進数に変換するという意味がそのまま名前になっています。逆変換のHEX2OCT関数とセットで覚えると便利ですよ。

OCT2HEX関数でできること

OCT2HEX関数の特徴をまとめると、次のとおりです。

  • 8進数を16進数のテキストに変換する
  • 変換できる範囲は -536,870,912〜536,870,911(30ビット符号付き整数)
  • 桁数引数を指定して左ゼロ埋めができるOCT2DEC関数と異なる)
  • 戻り値はテキスト型(文字列)→ 計算するには HEX2DEC で数値化が必要
  • ExcelのOCT2HEX関数と仕様が同じで、ファイル共有でもそのまま動作する

NOTE

OCT2HEX関数は逆変換のHEX2OCT関数(16進→8進)とペアで使います。また、姉妹関数のOCT2BIN関数(8進→2進)やOCT2DEC関数(8進→10進)と合わせて、基数変換セットとして覚えておくと便利ですよ。

OCT2HEX関数の書き方(構文と引数)

基本構文

=OCT2HEX(数値, [桁数])

カッコの中に、変換したい8進数と、必要なら桁数を指定します。桁数は省略可能です。

引数の説明

引数必須/任意説明
数値必須16進数に変換したい8進数(最大10文字)。-536,870,912〜536,870,911 に相当する値のみ有効
桁数任意結果の桁数(1〜10)。省略時は最小桁数。負の数では無視される

桁数を指定すると、結果の文字数が足りない場合に左に「0」を埋めて揃えてくれますよ。

第1引数:変換する8進数

数値に指定できるのは、次の条件を満たす値です。

  • 0〜7のみで構成された文字列(8や9は不可)
  • 最大10文字(30ビット)まで
  • 変換結果が -536,870,912〜536,870,911 の範囲に収まるもの

WARNING

OCT2HEX関数の引数には「8進数の文字列」または「8進数が入ったセル参照」を指定します。=OCT2HEX(077) のように先頭ゼロ付きの数値を直接書くと、スプレッドシートが先頭ゼロを落としてしまう場合があります。=OCT2HEX("077") のようにダブルクォートで文字列として指定するのが安全ですよ。

第2引数:桁数(任意)

桁数には1〜10の整数を指定できます。指定しない場合は、結果に必要な最小桁数で返ります。

  • 結果の桁数より大きい値を指定 → 左ゼロ埋めで揃える
  • 結果の桁数より小さい値を指定 → #NUM! エラー
  • 負の数の変換時 → 桁数指定は無視され、常に10桁で返る

ドキュメントで「002」「01F」のように見た目を揃えたい場面で活躍しますよ。

8進数と16進数の対応表

OCT2HEX関数の動きをイメージしやすくするため、よく使われる8進数の対応を表にまとめました。

8進数16進数10進数備考
000ゼロ
7771桁の最大値(8進数も16進数も同じ)
10882桁目に繰り上がり
17F1516進数の1桁最大
20101616進数の2桁目に繰り上がり
773F638進数の2桁最大
1004064
7551ED493Linuxパーミッション例
7771FF5118進数の3桁最大(全権限)
37777777771FFFFFFF536,870,911正の最大値

8進数3桁が16進数では2〜3桁になります。OCT2HEXの戻り値は最小桁数なので、左ゼロ埋めしたい場合は第2引数を活用しましょう。

OCT2HEX関数の基本的な使い方

直接入力で変換する

もっともシンプルな使い方から見ていきましょう。

=OCT2HEX("7")

結果は「7」です。8進数の「7」は16進数でも7なので、そのままの値が返ります。

=OCT2HEX("10")

結果は「8」です。8進数の「10」は10進数で8、それが16進数でも8に当たります。

=OCT2HEX("755")

結果は「1ED」です。8進数の「755」は10進数で493、それを16進数にすると1×256+14×16+13で1EDになります。

セル参照で変換する

実務では、セルに入っている8進数を変換する場面が多いです。A2に「644」が入っている場合は次のように書きます。

=OCT2HEX(A2)

結果は「1A4」です。6×64+4×8+4=420、これを16進数にすると1A4ですね。

A列: 8進数B列: 数式結果(16進数)
7=OCT2HEX(A2)7
10=OCT2HEX(A3)8
17=OCT2HEX(A4)F
100=OCT2HEX(A5)40
755=OCT2HEX(A6)1ED

桁数引数でゼロ埋めする

第2引数を指定すると、結果の桁数を強制的に揃えられます。台帳やドキュメント上で見た目を統一したいときに便利ですよ。

4桁にゼロ埋めする

=OCT2HEX("17", 4)

結果は「000F」です。本来は1桁の「F」ですが、左に「0」を3つ埋めて4桁に揃えています。

=OCT2HEX("755", 4)

結果は「01ED」です。3桁の「1ED」の左に「0」を1つ追加して4桁に整えています。

桁数比較表

同じ8進数に対して、桁数指定を変えた結果を比較してみます。

数式結果
=OCT2HEX(“7”)7
=OCT2HEX(“7”, 2)07
=OCT2HEX(“7”, 4)0007
=OCT2HEX(“755”)1ED
=OCT2HEX(“755”, 4)01ED
=OCT2HEX(“755”, 8)000001ED

メモリアドレス表記(4桁・8桁)に揃えたい場合に使い分けると便利ですね。

TIP

桁数を結果より小さく指定すると #NUM! エラーになります。=OCT2HEX("777", 1) は16進数で「1FF」(3桁)になるため、桁数1を指定するとエラーです。安全に揃えたい場合は、想定される最大桁数より大きめの値を指定しておきましょう。

ARRAYFORMULAで一括変換する

スプレッドシートならではの強みが、ARRAYFORMULA関数との組み合わせです。複数のセルをまとめて変換できますよ。

基本の一括変換

=ARRAYFORMULA(OCT2HEX(A2:A10))

A2からA10までの8進数データを、1つの数式で一気に16進数に変換できます。

A列: 8進数B列: 結果
77
108
10040
7551ED
7771FF

数式はB2セルに1つだけ書けば、B10まで自動的に展開されますよ。

桁数を揃えて一括変換

桁数引数も配列の中で使えます。

=ARRAYFORMULA(OCT2HEX(A2:A10, 4))

A2:A10 のすべての8進数を、左ゼロ埋めで4桁に揃えて変換します。台帳の見た目を一気に整えたい場面で重宝しますよ。

A列: 8進数B列: 4桁ゼロ埋め結果
70007
100008
1000040
75501ED
77701FF

戻り値はテキスト型(計算前にHEX2DECが必要)

OCT2HEX関数の注意点が、戻り値がテキスト(文字列)型である点です。同じシリーズのOCT2DEC関数が数値型を返すのとは対照的ですよ。

16進数には「A〜F」のアルファベットが含まれるため、そもそも数値として扱えません。そのため計算や集計に使うには、いったんHEX2DEC関数で10進数に戻す必要があります。

SUMで合計したい場合

=SUM(ARRAYFORMULA(HEX2DEC(OCT2HEX(A2:A10))))

OCT2HEX → HEX2DEC とつなぐことで、テキストで返ってきた16進数を10進数の数値に戻して合計しています。

ただし、最初から計算が目的ならOCT2DEC関数を使うほうがシンプルですよ。

=SUM(ARRAYFORMULA(OCT2DEC(A2:A10)))

こちらは1関数で済みます。OCT2HEXは「16進数の見た目で記録したい」「ドキュメントの表記に合わせたい」場面で選ぶ関数だと覚えておきましょう。

VLOOKUPの検索値として使う場合

16進数のIDで管理されているマスタを検索する場面では、テキスト型のままVLOOKUPに渡せます。

=VLOOKUP(OCT2HEX(A2, 4), アドレスマスタ!A:B, 2, FALSE)

A2の8進数を4桁ゼロ埋めの16進数に変換し、マスタ表を検索しています。マスタ側の16進数表記と桁数を揃えるのがポイントですよ。

負の数の変換(30ビット2の補数)

OCT2HEX関数で負の数に相当する8進数を変換すると、30ビットの2の補数表現で16進数が返されます。

負の数の仕組み

8進数の最上位1桁が4以上(4・5・6・7)の場合、最上位ビットが1となり負の数として解釈されます。結果は10桁の16進数で返り、最上位は「F」「E」などになりますよ。

=OCT2HEX("7777777777")

結果は「FFFFFFFF」(10桁)です。30ビットすべてが1で、10進数では -1 を表します。

=OCT2HEX("4000000000")

結果は「E0000000」(10桁)です。OCT2HEXで扱える最小値(-536,870,912)に当たります。

入力(8進数)結果(16進数)10進数換算
7777777777FFFFFFFF-1
7777777533FFFFFF5B-165
4000000000E0000000-536,870,912
37777777771FFFFFFF536,870,911(正の最大)

TIP

負の数の変換では、桁数引数を指定しても無視されます。常に10桁の16進数(左がF・Eなど)で返ることを覚えておきましょう。通常のパーミッション解析では正の数しか扱わないため、この挙動を意識する場面は限定的ですよ。

エラーの種類と対処法

#NUM! エラー

次のいずれかに当てはまると #NUM! エラーになります。

  • 0〜7以外の文字を含む8進数を指定した(8、9、A〜Fなど)
  • 入力が10文字を超えた
  • 結果が桁数引数より長い
  • 桁数引数が0以下、または10より大きい
=OCT2HEX("89")        → #NUM!(8と9は8進数では無効)
=OCT2HEX("12345678901") → #NUM!(11文字は範囲外)
=OCT2HEX("777", 1)    → #NUM!(結果1FFは3桁、桁数1では収まらない)

#VALUE! エラー

引数に数値や論理値など、文字列でない型を直接指定した場合に #VALUE! エラーになる場合があります。セル参照では基本的に発生しません。

エラー対処:IFERRORで包む

変換対象のデータが信頼できない場合は、IFERRORで包んでおくと安心です。

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

A2に無効な8進数が入っていた場合でも、「変換エラー」と表示して処理が止まりません。

エラー防止:正規表現で事前チェック

大量データを処理する前に、8進数として有効かどうかを確認しておくと安心です。

=REGEXMATCH(A2, "^[0-7]+$")

TRUEならOCT2HEXで変換できる可能性が高いです。8や9を含む入力を事前にはじけますよ。

OCT2HEX関数とExcelの互換性

GoogleスプレッドシートのOCT2HEX関数は、ExcelのOCT2HEX関数と仕様が同じです。構文・引数・変換ルール・エラー条件のすべてが一致しています。

ExcelファイルをGoogleスプレッドシートで開いた場合でも、OCT2HEX関数はそのまま動作します。逆にスプレッドシートで作成した数式をExcelで開いても問題ありませんよ。

Excel側の使い方を確認したい場合は、ExcelのOCT2HEX関数の記事も参考にしてくださいね。

OCT2シリーズ3関数の比較

OCTシリーズの変換関数(OCT2から始まる)を比較すると、変換先と戻り値の型が異なります。

関数変換先有効範囲(10進数換算)桁数引数戻り値型
OCT2BIN2進数-512〜511ありテキスト
OCT2HEX16進数-536,870,912〜536,870,911ありテキスト
OCT2DEC10進数-536,870,912〜536,870,911なし数値

OCT2HEXとOCT2BINは桁数引数で見た目を揃えられる代わりに、戻り値はテキスト型です。OCT2DECだけが桁数引数を持たず、戻り値は数値型で計算にそのまま使えますよ。

「ドキュメントに合わせて整形したい」ならOCT2HEX、「集計や検索に使いたい」ならOCT2DECと、目的で使い分けましょう。

まとめ

OCT2HEX関数は、8進数を16進数のテキストに変換するエンジニアリング関数です。

  • 基本構文: =OCT2HEX(数値, [桁数])
  • 有効範囲: -536,870,912〜536,870,911(正: 0〜3777777777)
  • 桁数引数で左ゼロ埋め可能(負の数では無視)
  • 戻り値はテキスト型 → 計算するにはHEX2DECで数値化が必要
  • Linuxパーミッションの16進記録やメモリアドレス整形などの実務で活躍

=OCT2HEX("755", 4) → 01ED のように、桁数を揃えてドキュメントの表記にぴったり合わせられるのがOCT2HEXの強みですよ。

逆変換にはHEX2OCT関数を使います。また姉妹関数のOCT2BIN関数(8進→2進)やOCT2DEC関数(8進→10進)と組み合わせることで、さまざまな基数変換をスプレッドシート上で完結できますよ。

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