「サーバーのパーミッション値(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進数 | 備考 |
|---|---|---|---|
| 0 | 0 | 0 | ゼロ |
| 7 | 7 | 7 | 1桁の最大値(8進数も16進数も同じ) |
| 10 | 8 | 8 | 2桁目に繰り上がり |
| 17 | F | 15 | 16進数の1桁最大 |
| 20 | 10 | 16 | 16進数の2桁目に繰り上がり |
| 77 | 3F | 63 | 8進数の2桁最大 |
| 100 | 40 | 64 | 8² |
| 755 | 1ED | 493 | Linuxパーミッション例 |
| 777 | 1FF | 511 | 8進数の3桁最大(全権限) |
| 3777777777 | 1FFFFFFF | 536,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列: 結果 |
|---|---|
| 7 | 7 |
| 10 | 8 |
| 100 | 40 |
| 755 | 1ED |
| 777 | 1FF |
数式はB2セルに1つだけ書けば、B10まで自動的に展開されますよ。
桁数を揃えて一括変換
桁数引数も配列の中で使えます。
=ARRAYFORMULA(OCT2HEX(A2:A10, 4))
A2:A10 のすべての8進数を、左ゼロ埋めで4桁に揃えて変換します。台帳の見た目を一気に整えたい場面で重宝しますよ。
| A列: 8進数 | B列: 4桁ゼロ埋め結果 |
|---|---|
| 7 | 0007 |
| 10 | 0008 |
| 100 | 0040 |
| 755 | 01ED |
| 777 | 01FF |
戻り値はテキスト型(計算前に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進数換算 |
|---|---|---|
| 7777777777 | FFFFFFFF | -1 |
| 7777777533 | FFFFFF5B | -165 |
| 4000000000 | E0000000 | -536,870,912 |
| 3777777777 | 1FFFFFFF | 536,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進数換算) | 桁数引数 | 戻り値型 |
|---|---|---|---|---|
| OCT2BIN | 2進数 | -512〜511 | あり | テキスト |
| OCT2HEX | 16進数 | -536,870,912〜536,870,911 | あり | テキスト |
| OCT2DEC | 10進数 | -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進)と組み合わせることで、さまざまな基数変換をスプレッドシート上で完結できますよ。
