「Linuxサーバーのアクセスログにずらっと並んでいるパーミッション値(755とか644)を、スプレッドシートで集計して権限の傾向を分析したい…」
スプレッドシートで権限管理台帳やサーバー設定の記録を扱っていると、8進数のままでは並べ替えやSUM・VLOOKUPがうまく動かなくて困りますよね。電卓で1件ずつ10進数に変換するのは、件数が増えると大変です。
そんなときに役立つのがGoogleスプレッドシートのOCT2DEC関数です。8進数の文字列を指定するだけで、10進数の数値に変換してくれますよ。
OCT2BINやOCT2HEXと違い、桁数引数がなくシンプルな構文で使えます。しかも戻り値が数値型なので、そのままSUM関数やVLOOKUP検索に渡せますよ。Excelとも互換性があるため、ファイルをやり取りする現場でも安心ですね。
この記事では、OCT2DEC関数の基本から戻り値の数値活用・Linuxパーミッション解析・エラー対処法まで解説します。ARRAYFORMULAでの一括変換や実務の活用例にも触れていきますよ。
OCT2DEC関数とは?
OCT2DEC関数(読み方: オクト・ツー・デック)は、8進数を10進数に変換するエンジニアリング関数です。Googleスプレッドシートに標準搭載されていて、追加設定なしで使えます。
8進数は0〜7の数字(合計8種類)で数値を表す方法です。3ビットで1桁を表せるため、UnixやLinuxのファイルパーミッション(chmod 755 など)でよく使われますね。スプレッドシートで権限値の集計や検索をしたい場面で、OCT2DEC関数を使えば10進数の数値に変換できますよ。
たとえば =OCT2DEC("54") と入力すると、結果は「44」です。8進数の「54」(5×8+4=44)が10進数の44と同じだとわかります。
関数名の由来
関数名を分解すると、次の意味になります。
- OCT = Octal(オクタル、8進数)
- 2 = to(〜へ)
- DEC = Decimal(デシマル、10進数)
つまり「OCTからDECへ」、8進数を10進数に変換するという意味がそのまま名前になっています。逆変換のDEC2OCT関数とセットで覚えると便利ですよ。
OCT2DEC関数でできること
OCT2DEC関数の特徴をまとめると、次のとおりです。
- 8進数を10進数の数値に変換する
- 変換できる範囲は -536,870,912〜536,870,911(30ビット符号付き整数)
- 桁数引数がない(OCT2BIN関数・OCT2HEX関数と異なる)
- 戻り値は数値型(文字列ではない)→ SUM・AVERAGE・VLOOKUPにそのまま使える
- ExcelのOCT2DEC関数と仕様が同じで、ファイル共有でもそのまま動作する
NOTE
OCT2DEC関数はDEC2OCT関数(10進→8進)と逆の変換を行います。また、HEX2DEC関数(16進→10進)やBIN2DEC関数(2進→10進)と合わせて、基数変換セットとして覚えておくと便利ですよ。
OCT2DEC関数の書き方(構文と引数)
基本構文
=OCT2DEC(数値)
カッコの中に、変換したい8進数を指定するだけです。OCT2BINやOCT2HEXと違い、桁数引数はありません。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 数値 | 必須 | 10進数に変換したい8進数(最大10文字)。-536,870,912〜536,870,911 に相当する値のみ有効 |
桁数を指定する第2引数はありません。シンプルに1つの引数だけで使えますよ。
第1引数:変換する8進数
数値に指定できるのは、次の条件を満たす値です。
- 0〜7のみで構成された文字列(8や9は不可)
- 最大10文字(30ビット)まで
- 変換結果が -536,870,912〜536,870,911 の範囲に収まるもの
- 正の数: 0〜3777777777(8進数、10進数では 0〜536,870,911)
- 負の数: 4000000000〜7777777777(30ビット2の補数表現)
WARNING
OCT2DEC関数の引数には「8進数の文字列」または「8進数が入ったセル参照」を指定します。
=OCT2DEC(077)のように先頭ゼロ付きの数値を直接書くと、スプレッドシートが先頭ゼロを落としてしまう場合があります。=OCT2DEC("077")のようにダブルクォートで文字列として指定するのが安全ですよ。
8進数と10進数の対応表
OCT2DEC関数の動きをイメージしやすくするため、よく使われる8進数の対応を表にまとめました。
| 8進数 | 10進数 | 備考 |
|---|---|---|
| 0 | 0 | ゼロ |
| 7 | 7 | 1桁の最大値 |
| 10 | 8 | 2桁目に繰り上がり |
| 17 | 15 | |
| 77 | 63 | 2桁の最大値 |
| 100 | 64 | 8² |
| 755 | 493 | Linuxパーミッション例 |
| 777 | 511 | 3桁の最大値(全権限) |
| 3777777777 | 536,870,911 | OCT2DEC の正の最大値 |
8進数の1桁は10進数の0〜7に対応します。2桁になると最大63(= 8²−1)、3桁になると最大511(= 8³−1)と、桁が増えるごとに8倍ずつ広がっていきますよ。
OCT2DEC関数の基本的な使い方
直接入力で変換する
もっともシンプルな使い方から見ていきましょう。
=OCT2DEC("7")
結果は「7」です。8進数の「7」は10進数でも7なので、そのままの値が返ります。
=OCT2DEC("10")
結果は「8」です。8進数の「10」は10進数で8(1×8+0)に当たります。
=OCT2DEC("755")
結果は「493」です。各桁を計算すると、7×64 + 5×8 + 5 = 448+40+5 = 493 となります。
セル参照で変換する
実務では、セルに入っている8進数を変換する場面が多いです。A2に「644」が入っている場合は次のように書きます。
=OCT2DEC(A2)
結果は「420」です。6×64 + 4×8 + 4 = 384+32+4 = 420 となります。
ARRAYFORMULAで一括変換する
スプレッドシートならではの強みが、ARRAYFORMULA関数との組み合わせです。
=ARRAYFORMULA(OCT2DEC(A2:A10))
A2からA10までの8進数データを、1つの数式で一気に10進数に変換できます。
| A列: 8進数 | B列: 数式 | 結果 |
|---|---|---|
| 7 | =ARRAYFORMULA(OCT2DEC(A2:A6)) | 7 |
| 10 | ↓ | 8 |
| 100 | ↓ | 64 |
| 755 | ↓ | 493 |
| 777 | ↓ | 511 |
戻り値は数値型(四則演算に直接使える)
OCT2DEC関数の最大の特徴が、戻り値が数値型である点です。OCT2BIN関数やOCT2HEX関数の戻り値がテキスト(文字列)であるのと異なります。
数値型で返るため、そのまま計算やLOOKUP関数に使えますよ。
SUM・AVERAGEで集計できる
=SUM(ARRAYFORMULA(OCT2DEC(A2:A10)))
複数の8進数を一括変換して合計を出せます。たとえば A2:A10 にパーミッション値が並んでいれば、その合計値を一発で計算できますよ。
=AVERAGE(ARRAYFORMULA(OCT2DEC(A2:A10)))
平均値も同様に計算できます。
VLOOKUPの検索値として使える
8進数の値で管理されている台帳から、10進数のIDテーブルを検索する場面では次のように書けます。
=VLOOKUP(OCT2DEC(A2), 権限マスタ!A:B, 2, FALSE)
A2の8進数パーミッション値を10進数に変換し、権限マスタ表の10進数列から対応する権限名を検索しています。
OCT2BINやOCT2HEXで変換した場合はテキスト型なので、数値で管理されているマスタとは一致しません。OCT2DECを使うことで、このような数値前提のLOOKUPが自然に書けますよ。
実務活用例:Linuxパーミッションの解析
OCT2DEC関数の代表的な実務活用が、Linuxサーバーのファイルパーミッション解析です。755や644のような3桁の8進数を、各桁ごとに分解して権限スコアを把握できます。
パーミッション3桁を1桁ずつ10進数に分解
3桁のパーミッションは、左からオーナー・グループ・その他の3つの権限を表します。MID関数で1桁ずつ取り出してOCT2DECに渡すと、各カテゴリの権限スコアが10進数で見えますよ。
=OCT2DEC(MID(A2,1,1)) ← オーナー権限
=OCT2DEC(MID(A2,2,1)) ← グループ権限
=OCT2DEC(MID(A2,3,1)) ← その他権限
A2に「755」が入っている場合の結果です。
| 数式 | 結果 | 意味 |
|---|---|---|
| =OCT2DEC(MID(“755”,1,1)) | 7 | オーナー = 7(読+書+実行) |
| =OCT2DEC(MID(“755”,2,1)) | 5 | グループ = 5(読+実行) |
| =OCT2DEC(MID(“755”,3,1)) | 5 | その他 = 5(読+実行) |
8進数の各桁は、3ビットの権限フラグ(読4+書2+実行1)の合計です。たとえば「7」は4+2+1で全権限ありを意味しますよ。
権限スコアの集計
パーミッション値を全体スコアとして集計したい場合は、3桁全体をOCT2DECに渡します。
=OCT2DEC(A2)
| パーミッション | 10進スコア | 意味 |
|---|---|---|
| 777 | 511 | 全員フル権限(最も緩い) |
| 755 | 493 | オーナーフル、他は読+実行 |
| 700 | 448 | オーナーのみフル権限 |
| 644 | 420 | オーナー読+書、他は読のみ |
| 600 | 384 | オーナー読+書のみ |
| 400 | 256 | オーナー読のみ(最も厳しい) |
10進数のスコアにすると、SUM・AVERAGE・並べ替えで「セキュリティが緩いファイルランキング」のような分析ができますよ。
負の数の変換(30ビット2の補数)
OCT2DEC関数で負の数に相当する8進数を変換すると、負の10進数が返されます。
負の数の仕組み
30ビット(10桁の8進数)の最上位ビットが1の場合、2の補数表現として負の数と解釈されます。8進数では、最上位の1桁が4以上(4・5・6・7)の場合に最上位ビット=1となり、負の数になりますよ。
=OCT2DEC("7777777777")
結果は「-1」です。30ビットすべてが1は、2の補数で -1 を表します。
=OCT2DEC("4000000000")
結果は「-536870912」です。OCT2DECの最小値(負の最大)に当たります。
| 入力(8進数) | 結果(10進数) | 備考 |
|---|---|---|
| 7777777777 | -1 | 30ビット全て1 |
| 7777777533 | -165 | 任意の負の値 |
| 4000000000 | -536,870,912 | 最小値 |
| 3777777777 | 536,870,911 | 最大値(正の最大) |
TIP
通常の業務(パーミッション解析など)で扱う8進数は3〜4桁で正の数なので、負の数の変換が必要になる場面はほとんどありません。符号付きレジスタ値を扱う特殊なシステム管理でだけ意識すれば大丈夫ですよ。
エラーの種類と対処法
#NUM! エラー
次のいずれかに当てはまると #NUM! エラーになります。
- 0〜7以外の文字を含む8進数を指定した(8、9、A〜Fなど)
- 入力が10文字を超えた
- 変換結果が -536,870,912〜536,870,911 の範囲外
=OCT2DEC("89") → #NUM!(8と9は8進数では無効)
=OCT2DEC("12345678901") → #NUM!(11文字は範囲外)
#VALUE! エラー
引数に数値や論理値など、文字列でない型を直接指定した場合に #VALUE! エラーになる場合があります。セル参照では基本的に発生しません。
エラー対処:IFERRORで包む
変換対象のデータが信頼できない場合は、IFERRORで包んでおくと安心です。
=IFERROR(OCT2DEC(A2), "変換エラー")
A2に無効な8進数が入っていた場合でも、「変換エラー」と表示して処理が止まりません。
エラー防止:正規表現で事前チェック
大量データを処理する前に、8進数として有効かどうかを確認しておくと安心です。
=REGEXMATCH(A2, "^[0-7]+$")
TRUEならOCT2DECで変換できる可能性が高いです。8や9を含む入力を事前にはじけますよ。
OCT2DEC関数とExcelの互換性
GoogleスプレッドシートのOCT2DEC関数は、ExcelのOCT2DEC関数と仕様が同じです。構文・引数・変換ルール・エラー条件のすべてが一致しています。
ExcelファイルをGoogleスプレッドシートで開いた場合でも、OCT2DEC関数はそのまま動作します。逆にスプレッドシートで作成した数式をExcelで開いても問題ありませんよ。
Excel側の使い方を確認したい場合は、ExcelのOCT2DEC関数の記事も参考にしてくださいね。
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 | なし | 数値 |
OCT2DECだけが桁数引数を持たず、戻り値も数値型です。四則演算・VLOOKUP・集計関数に直接渡せるのはOCT2DECだけなので、変換後に計算が必要な場面ではOCT2DECを使いましょう。
OCT2BINやOCT2HEXを使って変換後に計算したい場合は、さらにBIN2DEC・HEX2DEC関数を挟む必要があります。
まとめ
OCT2DEC関数は、8進数を10進数に変換するエンジニアリング関数です。
- 基本構文:
=OCT2DEC(数値)← 引数は1つだけ - 有効範囲: -536,870,912〜536,870,911(正: 0〜3777777777)
- 桁数引数なし(OCT2BIN・OCT2HEXとの違い)
- 戻り値は数値型 → SUM・VLOOKUP・四則演算に直接使える
- Linuxパーミッション解析や権限スコア集計などの実務で活躍
=OCT2DEC("755") → 493 のように、8進数を10進数に変換してそのまま計算に使えるのがOCT2DECの最大の強みですよ。
逆変換にはDEC2OCT関数を使います。またHEX2DEC関数(16進→10進)やBIN2DEC関数(2進→10進)、姉妹関数のOCT2BIN関数(8進→2進)と組み合わせることで、さまざまな基数変換をスプレッドシート上で完結できますよ。
