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

スポンサーリンク

「LinuxやmacOSで chmod 755 という設定を見て、この755が何を意味するのか確認したい」「サーバーの監査ログに16進数で出力されたパーミッション値を、運用で使い慣れた8進数に直したい」——こうしたシーンで活躍するのが、Googleスプレッドシートの HEX2OCT関数 です。

スプレッドシートでサーバー設定値や機器パラメータを管理していると、16進数の値を8進数に変換したい場面が出てきます。Unixファイルパーミッションは8進数で表記されることが多く、ネットワーク機器の設定ファイルや組み込みシステムのデータでも8進数が使われる場合があります。

HEX2OCT関数なら、16進数の文字列を指定するだけで、8進数の文字列に変換できます。桁数を指定してゼロ埋めできるので、パーミッション一覧表のように桁を揃えたい場面にも便利です。ExcelのHEX2OCT関数と仕様も同じなので、ファイルをやり取りする現場でも安心して使えますよ。

この記事では、HEX2OCT関数の基本から桁数指定・パーミッション解析・ログ解析・エラー対処法まで、実務で役立つ形にまとめて解説します。ARRAYFORMULAでの一括変換やFAQにも触れていきます。

HEX2OCT関数とは?

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

16進数は0〜9の数字とA〜Fのアルファベット(合計16種類)で数値を表す方法で、メモリアドレスや色コード、バイナリデータの表示などコンピュータの世界で広く使われます。一方の8進数は0〜7の数字(合計8種類)で表現する方式で、Unix系OSのファイルパーミッションや一部の組み込み機器の設定値で目にすることが多い形式です。HEX2OCT関数を使えば、16進数から8進数への変換作業をスプレッドシート上で自動化できますよ。

たとえば =HEX2OCT("FF") と入力すると、結果は「377」です。16進数の「FF」(10進数で255)が、8進数で表現されました。

関数名の由来

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

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

つまり「HEXからOCTへ」、16進数を8進数に変換するという意味がそのまま名前になっています。逆向きの変換が必要なときはスプレッドシートのOCT2HEX関数(8進→16進)を使うとペアで便利に運用できますよ。

HEX2OCT関数でできること

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

  • 16進数を8進数の文字列に変換する
  • 変換できる範囲は -536,870,912〜536,870,911(10進数換算、30ビット符号付き整数)
  • 桁数を指定して先頭にゼロ埋めできる
  • 負の数は2の補数(10桁)で返される
  • ExcelのHEX2OCT関数と仕様が同じで、ファイル共有でもそのまま動作する

NOTE

HEX2OCT関数はスプレッドシートのHEX2BIN関数(16進→2進)やスプレッドシートのHEX2DEC関数(16進→10進)と同じHEXシリーズに属します。変換先が違うだけで、引数の指定方法や負の数の扱いといった基本ルールは共通しているので、まとめて覚えておくと応用が利きますよ。

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関数(範囲は -512〜511)より広い範囲を扱えますが、HEX2DEC関数よりは狭い範囲です。変換する数値が大きすぎてHEX2OCTで #NUM! になる場合は、HEX2DECで10進数化して扱う方法も検討しましょう。

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

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

  • 1〜10の範囲で指定する
  • 結果の桁数より小さい値を指定すると #NUM! エラー
  • 0や負の値を指定するとエラーになる
  • 負の数を変換した場合、桁数指定は無視されて常に10桁で返される

WARNING

HEX2OCT関数の戻り値は数値ではなく「文字列」です。そのままSUM計算に使おうとしても機能しません。8進数を10進数に戻して計算したい場合はスプレッドシートのOCT2DEC関数を使ってくださいね。

16進数と8進数の対応表

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

16進数8進数10進数備考
000ゼロ
777 
81088進数で1桁繰り上がり
F1715 
FF3772551バイト最大値
1C07004487×64
1FF777511 

16進数の1桁は8進数の1桁以上に対応します。16 = 8×2 なので、16進数1桁は8進数の1.3〜2桁に相当します。HEX2OCT変換では、このような桁数の「ずれ」が生じますよ。

Unixパーミッションでよく使われる8進数と16進数の対応です。

16進数8進数パーミッション(Linux例)
1A4644rw-r–r–(ファイル標準)
1ED755rwxr-xr-x(実行ファイル標準)
1B6666rw-rw-rw-(全ユーザー読み書き)
1FF777rwxrwxrwx(全権限)
180600rw——-(秘密ファイル)

HEX2OCT関数の基本的な使い方

01 data sample table

直接入力で変換する

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

=HEX2OCT("FF")
02 formula hex2oct basic

結果は「377」です。16進数の「FF」(10進数255)が8進数で表されました。

=HEX2OCT("1A")

結果は「32」です。16進数の「1A」(10進数26)が8進数で表されました。

=HEX2OCT("1ED")

!_images/spreadsheet-hex2oct-function/03_result_hex2oct-basic.png

結果は「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
1ED755
180600
1B6666
1FF777

空セルが範囲に含まれる場合はIF文で空判定を入れておくと、リストの末尾が伸びても安全に動作します。

=ARRAYFORMULA(IF(A2:A="","",HEX2OCT(A2:A)))

桁数を指定して出力する(ゼロ埋め)

HEX2OCT関数の第2引数「桁数」を使うと、出力の文字数を揃えられます。パーミッション一覧表の作成でとくに便利な機能ですよ。

3桁固定フォーマット出力

Unixパーミッションは通常3桁で表記します。桁数に3を指定すると一覧が揃って読みやすくなります。

=HEX2OCT("7", 3)

結果は「007」です。桁数を省略すると「7」とだけ表示されますが、3を指定したことで先頭に「00」が追加されました。

数式結果用途
=HEX2OCT(“1ED”, 3)755rwxr-xr-x
=HEX2OCT(“1A4”, 3)644rw-r–r–
=HEX2OCT(“1FF”, 3)777rwxrwxrwx
=HEX2OCT(“7”, 3)007——-rwx
04 result hex2oct places

4桁固定で管理する場合

設定値をより詳細に管理する場合は4桁固定にすることもできます。SUID/SGID/Sticky Bit を含む4桁パーミッション(例: 4755)の管理にも応用できますよ。

=HEX2OCT("FF", 4)

結果は「0377」です。

実務活用例:Unixファイルパーミッション管理

HEX2OCT関数の最もわかりやすい実務活用が、Linuxサーバーのファイルパーミッション管理です。監査ログやセキュリティスキャナーの出力には、パーミッション値が16進数で記録されているケースが少なくありません。これをスプレッドシート上で8進数化しておけば、運用担当者にとって馴染みのある形式で確認・共有できます。

設定ファイルから8進数を取り出す

システム設定ファイルや監査ログに16進数のパーミッション値が記録されている場合、HEX2OCT関数でUnixの8進数表記に変換できます。

=HEX2OCT(A2, 3)

A列に16進数のパーミッション値が並んでいれば、B列に chmod コマンドで使える3桁の8進数を並べられます。

パーミッション一覧表の例

ファイル名16進数パーミッション8進数(HEX2OCT)意味
app.conf1A4644所有者R/W、グループR、その他R
start.sh1ED755所有者R/W/X、グループR/X、その他R/X
secret.key180600所有者R/W のみ
public/1FF777全員 R/W/X

スプレッドシートのCONCATENATE関数と組み合わせれば、=CONCATENATE("chmod ", HEX2OCT(A2, 3), " ", B2) のように実行コマンドを自動生成することもできますよ。サーバー作業の手順書づくりや、復旧用のスクリプト下書きにも活用できます。

実務活用例:監査ログ・ネットワーク機器設定の解析

HEX2OCTはサーバーパーミッション以外にも、運用現場での「16進数で記録された値」を読みやすい形に整える用途で重宝します。

ネットワーク機器の設定値変換

ルーターやスイッチの設定ファイルでは、ポートの状態フラグやACL(アクセス制御リスト)のビットマスクなどが16進数で出力されることがあります。これを8進数化することで、3ビットずつのフラグ単位で意味を読み取りやすくなります。

=HEX2OCT("3F", 2)

結果は「77」です。3桁ずつのビットグループとして解釈する場合、111 111 の6ビット全てが立っていることが直感的に分かります。

組み込み機器のレジスタ値解析

センサーやマイコンの設定レジスタ値が16進数のメモリダンプとして提供される場合、HEX2OCTで8進数化することで、3ビットごとのフィールド(モード設定など)を読み取りやすくする使い方もあります。

レジスタ名16進数(ダンプ)8進数(HEX2OCT)用途例
MODE_REG1B33動作モード3 + サブモード3
CONFIG_REG2A52設定パターンA
STATUS_REG3870ステータスビット111 + 000

このような変換結果を表にしておけば、機器の設計仕様書と照らし合わせる作業の時短につながります。

システム監査ログの整形

セキュリティ監査ツールが出力するログを取り込んで、=HEX2OCT(B2, 3) のように一括で8進数化し、人間が読める形にまとめておけば、レビュー会議や監査報告書の準備が一気にラクになりますよ。

負の数の変換(2の補数・10桁)

HEX2OCT関数で負の数に相当する16進数を変換すると、10桁(10文字)の8進数が返されます。これは「2の補数表現」と呼ばれる方式で、負の数をビット反転して扱う、コンピュータ内部での標準的な負数表現です。

負の数に相当する16進数の変換例

=HEX2OCT("FFFFFFFFFF")

結果は「7777777777」(10桁すべて7)です。10桁8進数の2の補数で -1 を表しています。

=HEX2OCT("FFE0000000")

結果は「7400000000」です。-536,870,912(最小値)を表しています。

入力(16進数)結果(8進数)10進数
FFFFFFFFFF7777777777-1
FFE00000007400000000-536,870,912(最小値)
1FFFFFFF777777777536,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桁は不足)
05 error num

#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で開いても問題ありませんよ。Excelでの使い方を確認したい場合はExcelのHEX2OCT関数の使い方も参考になります。

HEX2シリーズ3関数の比較

HEXシリーズの変換関数(HEX2から始まる)を比較すると、変換先と扱える範囲が異なります。

関数変換先有効範囲(10進数換算)桁数引数戻り値型
HEX2BIN2進数-512〜511ありテキスト
HEX2OCT8進数-536,870,912〜536,870,911ありテキスト
HEX2DEC10進数-549,755,813,888〜549,755,813,887なし数値

HEX2DECだけが桁数引数を持たず、戻り値も数値型です。変換後にさらに計算が必要な場合はHEX2DECを使うか、HEX2OCT変換後にOCT2DEC関数を挟む構成が使いやすいですよ。

HEX2OCT関数のよくある質問

Q. HEX2OCTの結果でSUMやAVERAGEが効かないのはなぜですか?

HEX2OCTの戻り値は 数値ではなく文字列 だからです。たとえば =HEX2OCT("FF") の結果「377」は8進数の文字列であり、10進数の数値ではありません。集計したい場合は、いったん10進数に戻す必要があります。具体的には OCT2DEC関数=OCT2DEC(HEX2OCT("FF")) のように包むと、255という数値が得られてSUMやAVERAGEの対象にできます。最初から数値として扱いたいときは、HEX2OCTを経由せず HEX2DEC関数 を直接使うほうがシンプルでおすすめです。

Q. 16進数の先頭に「0x」が付いた値(例: 0xFF)を変換するにはどうすればよいですか?

HEX2OCT関数は 0x プレフィックスを自動で取り除いてくれません。=HEX2OCT("0xFF") は #NUM! エラーになります。スプレッドシートの SUBSTITUTE関数0x を取り除いてから渡しましょう。

=HEX2OCT(SUBSTITUTE(A2, "0x", ""))

これでプログラムやログ出力で見かける 0xFF 形式の値も、そのまま列ごと変換できます。同様に # プレフィックス(CSSカラーコードなど)の場合は "#" を指定すれば対応できますよ。

Q. HEX2OCTで扱える範囲を超える16進数を変換したい場合はどうすればよいですか?

HEX2OCTの有効範囲(10進換算で -536,870,912〜536,870,911)を超えるとき、もっとも簡単な回避策は HEX2DEC関数 で一度10進数に変換し、必要に応じて手動でビットシフトなどの処理を行う方法です。HEX2DECはより広い範囲(-549,755,813,888〜549,755,813,887)に対応しています。それでも足りない場合は、上位桁と下位桁を分割して個別に変換し、文字列として結合する方法もあります。実務では、ほとんどのケースでHEX2OCTの範囲内に収まるので、まずは範囲超過がそもそも必要な要件なのかを見直すのもおすすめです。

まとめ

HEX2OCT関数は、16進数を8進数に変換するエンジニアリング関数です。最後にポイントを整理しておきましょう。

  • 基本構文: =HEX2OCT(数値, [桁数])
  • 有効範囲: -536,870,912〜536,870,911(16進数で FFE0000000〜1FFFFFFF)
  • 桁数を指定するとゼロ埋めで出力できる(例: 3桁固定でパーミッション表記)
  • 負の数は常に10桁(8進数の2の補数)で返される
  • Unixファイルパーミッション、ネットワーク機器設定、組み込み機器レジスタの管理などで活用できる
  • 戻り値は文字列。集計に使いたいときは OCT2DEC関数 で数値化する

=HEX2OCT(A2, 3) のように3桁固定で出力するパターンは、パーミッション一覧表の作成で重宝しますよ。逆向きの変換が必要な場面では スプレッドシートのOCT2HEX関数 と組み合わせて使えば、相互変換のワークフローも簡単に組めます。

HEXシリーズの他の関数(HEX2BINHEX2DEC)もシリーズとして覚えておくと、用途に応じて使い分けられて便利ですよ。


この記事で紹介した関数・関連記事

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