「Linuxのファイル権限(chmod)を10進数で管理しているけど、8進数表記に変換するのが面倒…」
システム管理やサーバー設定の仕事をスプレッドシートで記録していると、10進数と8進数を行き来したい場面が出てきます。たとえば chmod 755 の「755」は8進数表記で、これを10進数の権限値に変換するといった作業が必要になることがありますよね。
そんなときに役立つのがGoogleスプレッドシートのDEC2OCT関数です。10進数のセルを指定するだけで、8進数の文字列にすぐ変換できますよ。
Excelとも互換性があるため、他のメンバーとファイルをやり取りする現場でも安心して使えますね。
この記事では、DEC2OCT関数の基本から桁数指定・Linuxパーミッション管理・エラー対処法まで解説します。ARRAYFORMULAでの一括変換や実務の活用例にも触れていきますよ。
DEC2OCT関数とは?
DEC2OCT関数(読み方: デック・ツー・オクト)は、10進数を8進数に変換するエンジニアリング関数です。Googleスプレッドシートに標準搭載されていて、追加設定なしで使えます。
8進数は0〜7の数字(合計8種類)で数値を表す方法です。10進数の「7」は8進数でも「7」ですが、「8」は8進数で「10」に繰り上がります。
Linuxのファイルパーミッション(アクセス権限)の設定では、8進数が広く使われています。chmod 755 の「755」が3桁の8進数で、所有者・グループ・その他のユーザーそれぞれに「読み取り(4)+書き込み(2)+実行(1)」の組み合わせを1〜7の数字で表したものです。DEC2OCT関数を使えば、10進数の権限値を8進数のchmod値に変換できますよ。
たとえば =DEC2OCT(58, 3) と入力すると、結果は「072」です。10進数の58が8進数では72であることと、3桁にゼロ埋めされることがわかります。
関数名の由来
関数名を分解すると、次の意味になります。
- DEC = Decimal(デシマル、10進数)
- 2 = to(〜へ)
- OCT = Octal(オクタル、8進数)
つまり「DECからOCTへ」、10進数を8進数に変換するという意味がそのまま名前になっています。逆変換のOCT2DEC関数とセットで覚えると便利ですよ。
DEC2OCT関数でできること
DEC2OCT関数の特徴をまとめると、次のとおりです。
- 10進数を8進数の文字列に変換する
- 変換できる範囲は -536,870,912〜536,870,911(30ビット符号付き整数)
- 桁数を指定して先頭にゼロ埋めできる
- 負の数は2の補数(30ビット)で返される
- ExcelのDEC2OCT関数と仕様が同じで、ファイル共有でもそのまま動作する
NOTE
DEC2OCT関数はDEC2BIN関数(10進→2進)やDEC2HEX関数(10進→16進)と同じ「DECシリーズ」の関数です。変換先の基数だけが違うので、一度覚えると他の変換関数も使いやすくなりますよ。
DEC2OCT関数の書き方(構文と引数)
基本構文
=DEC2OCT(数値, [桁数])
カッコの中に、変換したい10進数と、必要に応じて桁数を指定します。桁数は省略できますよ。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 数値 | 必須 | 8進数に変換したい10進数。-536,870,912〜536,870,911の範囲で指定する |
| 桁数 | 任意 | 結果の最小文字数(1〜10)。省略すると必要最小限の桁数で返される |
第1引数:変換する10進数
数値に指定できるのは、次の条件を満たす値だけです。
- -536,870,912以上 536,870,911以下の整数(30ビット符号付き整数の範囲)
- 直接入力でもセル参照でもOK
- 小数を指定した場合は切り捨てて処理される
- 範囲外は #NUM! エラー
DEC2BINが-512〜511の狭い範囲なのに対して、DEC2OCTは約5億という広い範囲を扱えます。
第2引数:桁数(省略可)
桁数のルールは、次のとおりです。
- 1〜10の範囲で指定する
- 結果の桁数より小さい値を指定すると #NUM! エラー
- 0や負の値を指定するとエラーになる
- 負の数を変換した場合、桁数指定は無視されて常に10桁で返される
WARNING
DEC2OCT関数の戻り値は数値ではなく「文字列」です。そのまま計算に使おうとすると文字列として扱われます。8進数を10進数に戻して計算したい場合はOCT2DEC関数を使ってくださいね。
10進数と8進数の対応表
DEC2OCT関数の動きをイメージしやすくするため、よく使う値の対応を表にまとめました。
| 10進数 | 8進数(DEC2OCT) | 備考 |
|---|---|---|
| 0 | 0 | |
| 7 | 7 | 8進数最大の1桁 |
| 8 | 10 | 8進数の繰り上がり |
| 64 | 100 | 8^2 |
| 100 | 144 | 1×64 + 4×8 + 4 |
| 255 | 377 | 3×64 + 7×8 + 7 |
| 493 | 755 | chmod 755の10進数 |
| 420 | 644 | chmod 644の10進数 |
8進数は「8の累乗の足し算」で値が決まります。右から順に1、8、64、512…と位が重みを持つイメージですね。
たとえば10進数の「493」は、7×64 + 5×8 + 5 = 448+40+5 で、8進数にすると 755 になります。Linuxのchmodで「755」として設定する値の正体がこれですよ。
DEC2OCT関数の基本的な使い方
直接入力で変換する
もっともシンプルな使い方から見ていきましょう。
=DEC2OCT(8)
結果は「10」です。10進数の8は、8進数では「8の位が1、1の位が0」で 10 になります。
=DEC2OCT(255)
結果は「377」です。255 = 3×64 + 7×8 + 7 の計算から、8進数では「377」になります。
セル参照で変換する
実務では、セルに入っている10進数を変換する場面が多いです。A2のセルに「493」が入っている場合は、次のように書きます。
=DEC2OCT(A2)
結果は「755」です。Linuxのchmod 755に相当する8進数値が求められます。
ARRAYFORMULAで一括変換する
スプレッドシートならではの強みが、ARRAYFORMULA関数との組み合わせです。
=ARRAYFORMULA(DEC2OCT(A2:A10))
A2からA10までの10進数データを、1つの数式で一気に8進数に変換できます。
| A列: 10進数 | B列: 数式 | 結果 |
|---|---|---|
| 8 | =ARRAYFORMULA(DEC2OCT(A2:A6)) | 10 |
| 64 | ↓ | 100 |
| 100 | ↓ | 144 |
| 255 | ↓ | 377 |
| 493 | ↓ | 755 |
桁数を指定して出力する(ゼロ埋め)
DEC2OCT関数の第2引数「桁数」を使うと、出力の文字数を揃えられます。chmod管理表など桁を統一したい場面で便利ですよ。
3桁固定フォーマット出力
Linuxのchmod値は3桁の8進数で表すのが慣習です。DEC2OCTで3桁固定にしておくと、管理表が読みやすくなります。
=DEC2OCT(58, 3)
結果は「072」です。桁数を省略すると「72」とだけ表示されますが、3を指定したことで先頭に「0」が追加されました。
| 数式 | 結果 | 用途 |
|---|---|---|
| =DEC2OCT(8, 3) | 010 | 3桁固定 |
| =DEC2OCT(58, 3) | 072 | 公式ドキュメントの例 |
| =DEC2OCT(255, 3) | 377 | 3桁で収まる |
| =DEC2OCT(493, 3) | 755 | chmod 755相当 |
TIP
chmod値は0〜777(10進数で0〜511)の範囲に収まるので、3桁固定で問題なく揃えられます。
実務活用例:Linuxファイルパーミッション管理
DEC2OCT関数の最も実用的な活用例が、Linuxファイルパーミッション(chmod)の管理です。サーバー設定やインフラ管理をスプレッドシートで記録している場合に役立ちます。
chmod値の一覧表を作る
Linuxのchmodは3桁の8進数で、所有者・グループ・その他の各権限(読取=4、書込=2、実行=1の合計)を指定します。よく使う設定を変換表にまとめると、設定時の確認がスムーズになります。
| 設定内容 | 10進数 | chmod(8進数) |
|---|---|---|
| 所有者のみ全権限 | 448 | =DEC2OCT(448, 3) → 700 |
| 通常のWebファイル | 420 | =DEC2OCT(420, 3) → 644 |
| 通常のWebディレクトリ | 493 | =DEC2OCT(493, 3) → 755 |
| 全員に全権限 | 511 | =DEC2OCT(511, 3) → 777 |
| 全員に読取のみ | 292 | =DEC2OCT(292, 3) → 444 |
権限ビットから8進数への変換
各権限(読取=4、書込=2、実行=1)の合計を10進数で管理しているデータがある場合、次の計算でchmod値を求められます。
=(所有者権限値)*64 + (グループ権限値)*8 + (その他権限値)
=DEC2OCT(結果, 3)
たとえば所有者=rwx(7)、グループ=r-x(5)、その他=r-x(5)の場合:
=7*64 + 5*8 + 5 → 493
=DEC2OCT(493, 3) → 755
負の数の変換(2の補数・30ビット)
DEC2OCT関数で負の数を変換すると、30ビット(10桁8進数)の2の補数表現が返されます。
負の数の変換例
=DEC2OCT(-100)
結果は「7777777634」(10桁)です。
=DEC2OCT(-1)
結果は「7777777777」(10桁すべて7)です。
| 数式 | 結果 | 備考 |
|---|---|---|
| =DEC2OCT(-1) | 7777777777 | 10桁固定(全ビット1) |
| =DEC2OCT(-100) | 7777777634 | 10桁固定 |
| =DEC2OCT(-536870912) | 4000000000 | 負の最小値 |
NOTE
負の数の変換では、第2引数の桁数指定は無視されます。常に10桁で返されるため、3桁を指定しても10桁の結果になりますよ。
8進数の2の補数の読み方
先頭の8進数が「4」以上なら負の数を表しています。30ビットの符号付き整数として、先頭ビット(最上位ビット)が1なら負の数です。
- 正の数: 先頭が0〜3(最大 3777777777)
- 負の数: 先頭が4〜7(最小 4000000000)
エラーの種類と対処法
#NUM! エラー
次のいずれかに当てはまると #NUM! エラーになります。
- 数値が範囲外(-536,870,912 未満または 536,870,911 超)
- 桁数に 0 以下の値を指定した
- 桁数に結果の桁数より少ない値を指定した
=DEC2OCT(600000000) → #NUM!(範囲外)
=DEC2OCT(255, 2) → #NUM!(255の8進は"377"で3桁、2桁は不足)
#VALUE! エラー
数値や桁数に数値型でない値(文字列など)を直接指定すると #VALUE! エラーになります。
=DEC2OCT("abc") → #VALUE!
=DEC2OCT(255, "a") → #VALUE!
エラー対処:IFERRORで包む
変換対象のデータが信頼できない場合は、IFERRORで包んでおくと安心です。
=IFERROR(DEC2OCT(A2, 3), "エラー")
A2に範囲外の値や文字列が入っていた場合でも、「エラー」と表示して処理が止まりません。
DEC2OCT関数とExcelの互換性
GoogleスプレッドシートのDEC2OCT関数は、ExcelのDEC2OCT関数と仕様が同じです。構文・引数・変換ルール・エラー条件のすべてが一致しています。
ExcelファイルをGoogleスプレッドシートで開いた場合でも、DEC2OCT関数はそのまま動作します。逆にスプレッドシートで作成した数式をExcelで開いても問題ありませんよ。
DECシリーズ3関数の比較
DECシリーズの3関数を比較すると、変換先と扱える範囲が異なります。
| 関数 | 変換先 | 有効範囲(正) | 負の数桁数 | 主な用途 |
|---|---|---|---|---|
| DEC2BIN | 2進数 | 0〜511 | 10桁 | ビットフラグ・IPアドレス |
| DEC2OCT | 8進数 | 0〜536,870,911 | 10桁 | Linuxパーミッション(chmod) |
| DEC2HEX | 16進数 | 0〜549,755,813,887 | 10桁 | カラーコード・メモリアドレス |
DEC2OCTはDEC2BINの約100万倍の範囲を扱えます。chmod値(最大511)は余裕でカバーできますよ。
まとめ
DEC2OCT関数は、10進数を8進数に変換するエンジニアリング関数です。
- 基本構文:
=DEC2OCT(数値, [桁数]) - 有効範囲: -536,870,912〜536,870,911
- 桁数を指定するとゼロ埋めで出力できる
- 負の数は常に10桁(30ビット2の補数)で返される
- Linuxのchmod(ファイルパーミッション)管理で特に活用される
=DEC2OCT(493, 3) のようにchmod値(10進数)を3桁の8進数に変換するパターンは、サーバー設定管理表で重宝しますよ。
逆変換にはOCT2DEC関数を使います。またDEC2BINやDEC2HEX関数と組み合わせれば、さまざまな基数変換をスプレッドシート上で完結できますよ。
