「LinuxやmacOSで chmod 755 という設定を見て、この755が何を意味するのか確認したい…」
スプレッドシートでサーバー設定値や機器パラメータを管理していると、16進数の値を8進数に変換したい場面があります。Unixファイルパーミッションは8進数で表記されることが多く、ネットワーク機器の設定ファイルや組み込みシステムのデータでも8進数が使われる場合があります。
そんなときに役立つのがGoogleスプレッドシートのHEX2OCT関数です。16進数の文字列を指定するだけで、8進数の文字列に変換してくれますよ。
桁数を指定してゼロ埋めできるので、桁数を揃えたパーミッション一覧表も作れます。Excelとも互換性があるため、ファイルをやり取りする現場でも安心して使えますね。
この記事では、HEX2OCT関数の基本から桁数指定・パーミッション解析・エラー対処法まで解説します。ARRAYFORMULAでの一括変換や実務の活用例にも触れていきますよ。
HEX2OCT関数とは?
HEX2OCT関数(読み方: ヘックス・ツー・オクト)は、16進数を8進数に変換するエンジニアリング関数です。Googleスプレッドシートに標準搭載されていて、追加設定なしで使えます。
16進数は0〜9の数字とA〜Fのアルファベット(合計16種類)で数値を表す方法です。8進数は0〜7の数字(合計8種類)で数値を表します。コンピュータのファイルパーミッションやネットワーク設定で使われることが多い表現形式ですね。HEX2OCT関数を使えば、16進数から8進数への変換作業をスプレッドシートで自動化できますよ。
たとえば =HEX2OCT("FF") と入力すると、結果は「377」です。16進数の「FF」(255)が8進数で表現されました。
関数名の由来
関数名を分解すると、次の意味になります。
- HEX = Hexadecimal(ヘキサデシマル、16進数)
- 2 = to(〜へ)
- OCT = Octal(オクタル、8進数)
つまり「HEXからOCTへ」、16進数を8進数に変換するという意味がそのまま名前になっています。逆変換のBIN2OCT関数(2進→8進)とは変換元が異なりますよ。
HEX2OCT関数でできること
HEX2OCT関数の特徴をまとめると、次のとおりです。
- 16進数を8進数の文字列に変換する
- 変換できる範囲は -536,870,912〜536,870,911(10進数換算、30ビット符号付き整数)
- 桁数を指定して先頭にゼロ埋めできる
- 負の数は2の補数(10桁)で返される
- ExcelのHEX2OCT関数と仕様が同じで、ファイル共有でもそのまま動作する
NOTE
HEX2OCT関数はHEX2BIN関数(16進→2進)と同じシリーズです。変換先が8進数になっただけで構文・動作の仕組みは同じですよ。
HEX2OCT関数の書き方(構文と引数)
基本構文
=HEX2OCT(数値, [桁数])
カッコの中に、変換したい16進数と、必要に応じて桁数を指定します。桁数は省略できますよ。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 数値 | 必須 | 8進数に変換したい16進数(最大10文字)。-536,870,912〜536,870,911(10進数)に相当する値のみ有効 |
| 桁数 | 任意 | 結果の最小文字数(1〜10)。省略すると必要最小限の桁数で返される |
第1引数:変換する16進数
数値に指定できるのは、次の条件を満たす値だけです。
- 0〜9とA〜F(大文字・小文字どちらでもOK)のみで構成された文字列
- 変換結果が -536,870,912〜536,870,911(10進数)の範囲に収まるもの
- 正の数: 0〜1FFFFFFF(16進数、10進数では 0〜536,870,911)
- 負の数: FFE0000000〜FFFFFFFFFF(40ビット2の補数表現)
- 範囲外は #NUM! エラー
TIP
HEX2OCTはHEX2BINより広い範囲(HEX2BINは-512〜511)を扱えますが、HEX2DECより狭い範囲です。変換する数値が大きい場合はHEX2DECを使って10進数に変換する方法も検討しましょう。
第2引数:桁数(省略可)
桁数のルールは、次のとおりです。
- 1〜10の範囲で指定する
- 結果の桁数より小さい値を指定すると #NUM! エラー
- 0や負の値を指定するとエラーになる
- 負の数を変換した場合、桁数指定は無視されて常に10桁で返される
WARNING
HEX2OCT関数の戻り値は数値ではなく「文字列」です。そのままSUM計算に使おうとしても機能しません。8進数を10進数に戻して計算したい場合はOCT2DEC関数を使ってくださいね。
16進数と8進数の対応表
HEX2OCT関数の動きをイメージしやすくするため、よく使われる値の対応を表にまとめました。
| 16進数 | 8進数 | 10進数 | 備考 |
|---|---|---|---|
| 0 | 0 | 0 | ゼロ |
| 7 | 7 | 7 | |
| 8 | 10 | 8 | 8進数で1桁繰り上がり |
| F | 17 | 15 | |
| FF | 377 | 255 | 1バイト最大値 |
| 1C0 | 700 | 448 | 7×64 |
| 1FF | 777 | 511 |
16進数の1桁は8進数の1桁以上に対応します。16 = 8×2 なので、16進数1桁は8進数の1.3〜2桁に相当します。HEX2OCT変換では、このような桁数の「ずれ」が生じますよ。
Unixパーミッションでよく使われる8進数と16進数の対応です。
| 16進数 | 8進数 | パーミッション(Linux例) |
|---|---|---|
| 1A4 | 644 | rw-r–r–(ファイル標準) |
| 1ED | 755 | rwxr-xr-x(実行ファイル標準) |
| 1B6 | 666 | rw-rw-rw-(全ユーザー読み書き) |
| 1FF | 777 | rwxrwxrwx(全権限) |
| 180 | 600 | rw——-(秘密ファイル) |
HEX2OCT関数の基本的な使い方
直接入力で変換する
もっともシンプルな使い方から見ていきましょう。
=HEX2OCT("FF")
結果は「377」です。16進数の「FF」(10進数255)が8進数で表されました。
=HEX2OCT("1A")
結果は「32」です。16進数の「1A」(10進数26)が8進数で表されました。
=HEX2OCT("1ED")
結果は「755」です。chmod 755 のパーミッション値が16進数「1ED」であることがわかります。
セル参照で変換する
実務では、セルに入っている16進数を変換する場面が多いです。A2のセルに「1ED」が入っている場合は、次のように書きます。
=HEX2OCT(A2)
結果は「755」です。
ARRAYFORMULAで一括変換する
スプレッドシートならではの強みが、ARRAYFORMULA関数との組み合わせです。
=ARRAYFORMULA(HEX2OCT(A2:A10))
A2からA10までの16進数データを、1つの数式で一気に8進数に変換できます。
| A列: 16進数 | B列: 数式 | 結果 |
|---|---|---|
| 1A4 | =ARRAYFORMULA(HEX2OCT(A2:A6)) | 644 |
| 1ED | ↓ | 755 |
| 180 | ↓ | 600 |
| 1B6 | ↓ | 666 |
| 1FF | ↓ | 777 |
桁数を指定して出力する(ゼロ埋め)
HEX2OCT関数の第2引数「桁数」を使うと、出力の文字数を揃えられます。パーミッション一覧表の作成でとくに便利な機能ですよ。
3桁固定フォーマット出力
Unixパーミッションは通常3桁で表記します。桁数に3を指定すると一覧が揃って読みやすくなります。
=HEX2OCT("7", 3)
結果は「007」です。桁数を省略すると「7」とだけ表示されますが、3を指定したことで先頭に「00」が追加されました。
| 数式 | 結果 | 用途 |
|---|---|---|
| =HEX2OCT(“1ED”, 3) | 755 | rwxr-xr-x |
| =HEX2OCT(“1A4”, 3) | 644 | rw-r–r– |
| =HEX2OCT(“1FF”, 3) | 777 | rwxrwxrwx |
| =HEX2OCT(“7”, 3) | 007 | ——-rwx |
4桁固定で管理する場合
設定値をより詳細に管理する場合は4桁固定にすることもできます。
=HEX2OCT("FF", 4)
結果は「0377」です。
実務活用例:Unixファイルパーミッション管理
HEX2OCT関数の最もわかりやすい実務活用が、Linuxサーバーのファイルパーミッション管理です。
設定ファイルから8進数を取り出す
システム設定ファイルや監査ログに16進数のパーミッション値が記録されている場合、HEX2OCT関数でUnixの8進数表記に変換できます。
=HEX2OCT(A2, 3)
A列に16進数のパーミッション値が並んでいれば、B列に chmod コマンドで使える3桁の8進数を並べられます。
パーミッション一覧表の例
| ファイル名 | 16進数パーミッション | 8進数(HEX2OCT) | 意味 |
|---|---|---|---|
| app.conf | 1A4 | 644 | 所有者R/W、グループR、その他R |
| start.sh | 1ED | 755 | 所有者R/W/X、グループR/X、その他R/X |
| secret.key | 180 | 600 | 所有者R/W のみ |
| public/ | 1FF | 777 | 全員 R/W/X |
=CONCATENATE("chmod ", HEX2OCT(A2, 3), " ", B2) のように組み合わせれば、実行コマンドを自動生成することもできますよ。
負の数の変換(2の補数・10桁)
HEX2OCT関数で負の数に相当する16進数を変換すると、10桁(10文字)の8進数が返されます。
負の数に相当する16進数の変換例
=HEX2OCT("FFFFFFFFFF")
結果は「7777777777」(10桁すべて7)です。10桁8進数の2の補数で -1 を表しています。
=HEX2OCT("FFE0000000")
結果は「7400000000」です。-536,870,912(最小値)を表しています。
| 入力(16進数) | 結果(8進数) | 10進数 |
|---|---|---|
| FFFFFFFFFF | 7777777777 | -1 |
| FFE0000000 | 7400000000 | -536,870,912(最小値) |
| 1FFFFFFF | 777777777 | 536,870,911(最大値) |
NOTE
負の数の変換では、第2引数の桁数指定は無視されます。常に10桁で返されるため、3桁を指定しても10桁の結果になりますよ。
エラーの種類と対処法
#NUM! エラー
次のいずれかに当てはまると #NUM! エラーになります。
- 変換結果が -536,870,912〜536,870,911(10進数)の範囲外
- 桁数に 0 以下の値を指定した
- 桁数に結果の桁数より少ない値を指定した
=HEX2OCT("20000000") → #NUM!(536,870,911 超えの正の値)
=HEX2OCT("FF", 1) → #NUM!(FFは8進数で377(3桁)、1桁は不足)
#VALUE! エラー
桁数に数値型でない値を指定すると #VALUE! エラーになります。
=HEX2OCT("F", "a") → #VALUE!
また、0〜9・A〜F(a〜f)以外の文字を含む16進数を指定すると #NUM! エラーになります。
=HEX2OCT("GG") → #NUM!(G は16進数では無効な文字)
エラー対処:IFERRORで包む
変換対象のデータが信頼できない場合は、IFERRORで包んでおくと安心です。
=IFERROR(HEX2OCT(A2, 3), "エラー")
A2に範囲外の値や無効な文字が入っていた場合でも、「エラー」と表示して処理が止まりません。
HEX2OCT関数とExcelの互換性
GoogleスプレッドシートのHEX2OCT関数は、ExcelのHEX2OCT関数と仕様が同じです。構文・引数・変換ルール・エラー条件のすべてが一致しています。
ExcelファイルをGoogleスプレッドシートで開いた場合でも、HEX2OCT関数はそのまま動作します。逆にスプレッドシートで作成した数式をExcelで開いても問題ありませんよ。
HEX2シリーズ3関数の比較
HEXシリーズの変換関数(HEX2から始まる)を比較すると、変換先と扱える範囲が異なります。
| 関数 | 変換先 | 有効範囲(10進数換算) | 桁数引数 | 戻り値型 |
|---|---|---|---|---|
| HEX2BIN | 2進数 | -512〜511 | あり | テキスト |
| HEX2OCT | 8進数 | -536,870,912〜536,870,911 | あり | テキスト |
| HEX2DEC | 10進数 | -549,755,813,888〜549,755,813,887 | なし | 数値 |
HEX2DECだけが桁数引数を持たず、戻り値も数値型です。変換後にさらに計算が必要な場合はHEX2DECを使うか、HEX2OC変換後にOCT2DEC関数を挟む構成が使いやすいですよ。
まとめ
HEX2OCT関数は、16進数を8進数に変換するエンジニアリング関数です。
- 基本構文:
=HEX2OCT(数値, [桁数]) - 有効範囲: -536,870,912〜536,870,911(16進数で FFE0000000〜1FFFFFFF)
- 桁数を指定するとゼロ埋めで出力できる
- 負の数は常に10桁(8進数の2の補数)で返される
- Unixファイルパーミッション管理などで活用される
=HEX2OCT(A2, 3) のように3桁固定で出力するパターンは、パーミッション一覧表の作成で重宝しますよ。
逆変換にはHEX2BIN関数(16進→2進)や2026-04-24-spreadsheet-hex2dec-functionのHEX2DEC関数(16進→10進)もシリーズとして覚えておくと便利ですよ。
