「10進数を8進数に変換したいけど、手計算は面倒…」
Excelには、そんな変換を一発で行える関数があります。それがDEC2OCT関数です。
Linuxのファイル権限(chmod)やプログラミングで、8進数が必要になる場面は意外とあります。でも手計算で変換するのは桁数が増えると大変ですよね。
この記事では、ExcelのDEC2OCT関数の使い方を基本から解説します。桁数指定のゼロ埋め、エラー対策、chmodパーミッション変換ワークフローまで網羅しますよ。
ExcelのDEC2OCT関数とは?読み方と基本概要
DEC2OCT関数は、10進数を8進数に変換するExcelの関数です。
10進数は私たちが普段使っている0〜9の数字で表す方法です。一方、8進数は「0」〜「7」の8種類の数字で数を表します。8進数はLinuxのファイル権限やプログラミングで使われています。
DEC2OCT関数を使えば、この変換を自動で行えますよ。
読み方と意味
読み方は「デック・ツー・オクト」です。
- DEC = Decimal(デシマル、10進数)
- 2 = to(〜へ)
- OCT = Octal(オクタル、8進数)
つまり「10進数から8進数へ」という意味です。Excelの進数変換関数はすべてこの命名規則に従います。たとえばOCT2DEC関数なら「8進数から10進数へ」です。関数名がそのまま機能を表しているので覚えやすいですよ。
どんなときに使うか
DEC2OCT関数は次のような場面で活躍します。
- Linuxのファイル権限(chmod)を8進数で確認・管理したいとき
- プログラミングで8進数リテラルの値を調べたいとき
- 情報処理試験の勉強で進数変換を練習したいとき
- 10進数と8進数の対応表を作りたいとき
DEC2OCT関数の書き方(構文と引数)
基本構文
=DEC2OCT(数値, [桁数])
引数は2つあります。必須なのは「数値」だけです。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 数値 | 必須 | 8進数に変換したい10進数の整数 |
| 桁数 | 任意 | 結果の文字数を指定。先頭をゼロで埋める |
引数1:数値(必須)
8進数に変換したい10進数の整数を指定します。セル参照でも直接入力でもOKです。小数を指定した場合は、小数点以下が切り捨てられます。
引数2:桁数(省略可)
結果の文字数(桁数)を整数で指定します。省略すると、変換に必要な最小限の桁数で返されます。指定すると、先頭にゼロを埋めて桁数を揃えてくれますよ。
たとえば =DEC2OCT(58) は「72」です。=DEC2OCT(58, 3) なら「072」になります。
NOTE
桁数に小数を指定した場合は、小数点以下が切り捨てられます。0以下の値を指定すると#NUM!エラーになります。
変換できる数値の範囲(-536,870,912〜536,870,911)
変換できる数値の範囲は -536,870,912から536,870,911 です。これは30ビット(10桁)の符号付き整数で表現できる範囲です。2の29乗=536,870,912が根拠になっています。
- 正の最大値: 536,870,911 → 3777777777(10桁)
- 負の最小値: -536,870,912 → 4000000000(10桁)
範囲外の数値を指定すると#NUM!エラーになります。
なぜDEC2BINより範囲が格段に広いのか
DEC2BIN関数の入力範囲は-512〜511です。一方、DEC2OCT関数は約±5億まで扱えます。
この差は桁数あたりの情報量の違いによるものです。2進数は1桁で1ビットですが、8進数は1桁で3ビットを表せます。どちらも最大10桁ですが、表現できるビット数が異なります。
| 関数 | 1桁あたりのビット数 | 最大桁数 | 合計ビット数 | 入力範囲 |
|---|---|---|---|---|
| DEC2BIN | 1ビット | 10桁 | 10ビット | -512〜511 |
| DEC2OCT | 3ビット | 10桁 | 30ビット | -536,870,912〜536,870,911 |
DEC2OCTはDEC2BINの約1,048,576倍(2^20倍)の範囲を扱えます。大きな数値を扱う場合はDEC2OCTのほうが適していますよ。
対応バージョン一覧
DEC2OCT関数は、Excel 2007以降で標準搭載されています。
| バージョン | 対応状況 |
|---|---|
| Microsoft 365(Windows / Mac) | 対応 |
| Excel 2024 / 2021 / 2019 / 2016 | 対応 |
| Excel for the web | 対応 |
| Excel 2007 / 2010 / 2013 | 対応 |
| Excel 2003以前 | 分析ツールアドインが必要 |
現在の主要バージョンならアドインの追加は不要です。お使いのバージョンが古くなければ気にしなくて大丈夫ですよ。
DEC2OCT関数の基本的な使い方
シンプルな変換例(0〜536,870,911)
まずは関数に直接値を入力してみましょう。
=DEC2OCT(8)
結果は「10」です。10進数の8は、8進数で10になります。
変換の仕組みを確認しておきます。各桁に8のべき乗を対応させて合計します。
| 桁 | 2桁目 | 1桁目 |
|---|---|---|
| 8進数 | 1 | 0 |
| 重み | 8^1 = 8 | 8^0 = 1 |
| 計算 | 1 x 8 = 8 | 0 x 1 = 0 |
合計: 8 + 0 = 8 ですね。
よく使う変換例をまとめておきます。
| 入力(10進数) | 数式 | 出力(8進数) |
|---|---|---|
| 0 | =DEC2OCT(0) | 0 |
| 7 | =DEC2OCT(7) | 7 |
| 8 | =DEC2OCT(8) | 10 |
| 64 | =DEC2OCT(64) | 100 |
| 100 | =DEC2OCT(100) | 144 |
| 255 | =DEC2OCT(255) | 377 |
| 511 | =DEC2OCT(511) | 777 |
| 4096 | =DEC2OCT(4096) | 10000 |
結果はテキスト文字列として返されます。見た目は数値ですが、左寄せで表示されるのが目印です。
負の数の変換(2の補数表現)
DEC2OCT関数に負の数を指定すると、2の補数(にのほすう)で表現された10桁の8進数が返ります。
2の補数とは、コンピュータが負の整数を表す仕組みです。最上位の8進桁が4以上(4〜7)なら負の数を意味します。
=DEC2OCT(-100)
結果は「7777777634」です。桁数の指定に関わらず、常に10桁で返されます。
負の数の代表的な変換例です。
| 入力(10進数) | 出力(8進数) | 備考 |
|---|---|---|
| -1 | 7777777777 | 全桁7 |
| -100 | 7777777634 | 10桁固定 |
| -256 | 7777777400 | |
| -536,870,912 | 4000000000 | 負の最小値 |
逆変換のOCT2DEC関数を使えば元に戻せます。
=OCT2DEC(DEC2OCT(-100))
結果は「-100」です。正しく往復変換できることを確認できますよ。
桁数を指定してゼロ埋めする
第2引数に桁数を指定すると、先頭にゼロを埋めて桁数を揃えられます。
=DEC2OCT(58, 3)
結果は「072」です。3桁に揃えてくれました。
桁数を指定しない場合と比べてみましょう。
| 数式 | 結果 | 備考 |
|---|---|---|
| =DEC2OCT(58) | 72 | 最小桁数(2桁) |
| =DEC2OCT(58, 3) | 072 | 3桁にゼロ埋め |
| =DEC2OCT(8) | 10 | 最小桁数(2桁) |
| =DEC2OCT(8, 4) | 0010 | 4桁にゼロ埋め |
chmodのパーミッション値を常に3桁で揃えたいときなどに便利ですよ。
DEC2OCT関数のよくあるエラーと対処法
DEC2OCT関数で発生するエラーは主に2種類です。原因別に対処法を見ていきましょう。
#NUM!エラー:範囲外と桁数の問題
#NUM!エラーが出る原因は3つあります。
原因1:数値が範囲外(-536,870,912未満または536,870,911超)
=DEC2OCT(536870912) → #NUM!エラー
=DEC2OCT(-536870913) → #NUM!エラー
対処法は、指定する値が-536,870,912〜536,870,911に収まっているか確認することです。
原因2:桁数が0以下
=DEC2OCT(8, 0) → #NUM!エラー
桁数には1以上の整数を指定してください。
原因3:桁数が結果の桁数より少ない
=DEC2OCT(64, 2) → #NUM!エラー
64の8進数は「100」で3桁必要です。桁数に2を指定すると足りないためエラーになります。
#VALUE!エラー:文字列・空白セルの混入
#VALUE!エラーが出る原因は2つあります。
原因1:数値が数値型でない
=DEC2OCT("ABC") → #VALUE!エラー
原因2:桁数が数値型でない
=DEC2OCT(8, "A") → #VALUE!エラー
引数には数値型のデータを指定しましょう。空白セルを参照している場合も注意が必要です。
エラーパターン早見表
エラーの原因と対処法を表にまとめます。
| エラー | 原因 | 数式例 | 対処法 |
|---|---|---|---|
| #NUM! | 数値が-536,870,912未満または536,870,911超 | =DEC2OCT(536870912) | 値を範囲内に収める |
| #NUM! | 桁数が0以下 | =DEC2OCT(8, 0) | 桁数を1以上にする |
| #NUM! | 桁数が結果の桁数より少ない | =DEC2OCT(64, 2) | 桁数を結果以上にする |
| #VALUE! | 数値が文字列 | =DEC2OCT(“ABC”) | 数値型のデータを指定 |
| #VALUE! | 桁数が文字列 | =DEC2OCT(8, “A”) | 桁数に数値を指定 |
IFERRORと組み合わせてエラー回避
エラーが出る可能性がある場合は、IFERROR関数(エラー時に代替値を返す関数)で囲むと安全です。
=IFERROR(DEC2OCT(A1), "変換エラー")
この数式なら、A1の値が範囲外でもエラーの代わりに「変換エラー」と表示されます。
入力値のチェックと組み合わせる方法もあります。
=IF(AND(A1>=-536870912, A1<=536870911), DEC2OCT(A1), "範囲外")
あらかじめ範囲をチェックしてから変換すると、より安心ですよ。
536,870,911を超える値を8進数に変換するテクニック
DEC2OCT関数の上限は536,870,911です。でも実務ではもっと大きな数値を8進数にしたい場面もありますよね。
BASE関数を使う方法(Microsoft 365 / Excel 2013以降)
Excel 2013以降なら、BASE関数(ベース関数)を使う方法があります。BASE関数は任意の基数(2〜36)に変換できる関数です。
=BASE(1000000000, 8)
結果は「7346545000」です。DEC2OCT関数の約±5億の制限がないので、大きな値もそのまま変換できます。
DEC2OCT関数とBASE関数の違いを比較します。
| 項目 | DEC2OCT | BASE |
|---|---|---|
| 入力範囲 | -536,870,912〜536,870,911 | 0〜2^53 |
| 負の数 | 2の補数で返す | 非対応(エラー) |
| 桁数指定 | 第2引数で指定 | 第3引数で指定 |
| 対応バージョン | Excel 2007以降 | Excel 2013以降 |
負の数を2の補数で変換したいならDEC2OCT関数を使いましょう。正の大きな値だけならBASE関数が便利ですよ。
分割結合で対応する方法
BASE関数が使えない環境では、数値を上位と下位に分割して結合する方法もあります。
=DEC2OCT(INT(A1/536870912)) & DEC2OCT(MOD(A1, 536870912), 10)
A1に1,000,000,000を入れると、商が1、余りが463,129,088です。これをDEC2OCT関数でそれぞれ変換し、文字列結合します。
ただし、この方法は桁の繰り上がりに注意が必要です。特別な理由がなければBASE関数を使うほうがシンプルですよ。
実用例:chmodパーミッション変換ワークフロー
DEC2OCT関数が最も活躍するのは、Linuxのファイル権限(chmod)管理です。chmodコマンドは8進数3桁で権限を指定します。DEC2OCT関数を使えば、10進数ベースで計算した権限値を8進数に変換できます。
権限ビットの仕組み
Linuxのファイル権限は「読み取り」「書き込み」「実行」の3種類です。それぞれにビットの重みが割り当てられています。
| 権限 | 記号 | ビット値 |
|---|---|---|
| 読み取り(Read) | r | 4 |
| 書き込み(Write) | w | 2 |
| 実行(Execute) | x | 1 |
この3つの権限を「所有者」「グループ」「その他」の3区分に割り当てます。各区分は0〜7の値を取ります。
権限値の計算と変換
たとえば「所有者に全権限、グループと他に読み取り+実行」を設定したい場合、各区分の値は次のとおりです。
- 所有者: 4 + 2 + 1 = 7
- グループ: 4 + 0 + 1 = 5
- その他: 4 + 0 + 1 = 5
この3つの値を10進数1つにまとめるには、各区分に8の重みをかけます。
= 7 × 64 + 5 × 8 + 5 × 1 = 493
DEC2OCT関数で変換してみましょう。
=DEC2OCT(493)
結果は「755」です。chmod 755 に対応する値だと確認できます。
代表的なchmod値の早見表
よく使うchmod値とその10進数換算をまとめます。
| chmodコマンド | 8進数 | 10進数 | 所有者 | グループ | その他 |
|---|---|---|---|---|---|
| chmod 755 | 755 | 493 | rwx | r-x | r-x |
| chmod 644 | 644 | 420 | rw- | r– | r– |
| chmod 700 | 700 | 448 | rwx | — | — |
| chmod 600 | 600 | 384 | rw- | — | — |
| chmod 777 | 777 | 511 | rwx | rwx | rwx |
=DEC2OCT(493) で「755」、=DEC2OCT(420) で「644」が返ります。
Excel上で権限計算シートを作る
実務では、権限の組み合わせをExcelで一覧管理するケースがあります。次のようなシートを作ると便利です。
A列に所有者の権限値(0〜7)、B列にグループの権限値、C列にその他の権限値を入力します。D列に以下の数式を入れましょう。
=DEC2OCT(A1*64 + B1*8 + C1, 3)
第2引数に3を指定すると、常に3桁のchmod表記で返されます。たとえばA1=6、B1=4、C1=4なら「644」です。
逆に、10進数から各区分の権限を分解するにはOCT2DEC関数と組み合わせます。
所有者: =INT(A1/64)
グループ: =INT(MOD(A1,64)/8)
その他: =MOD(A1,8)
A1に493を入れると、所有者=7、グループ=5、その他=5と分解できますよ。
OCT2DEC関数で逆変換する(8進数→10進数)
DEC2OCT関数の逆変換にはOCT2DEC関数を使います。セットで覚えておくと便利です。
往復変換で検算する
変換結果が正しいか確認するには、往復変換が有効です。
=OCT2DEC(DEC2OCT(100))
結果が「100」に戻れば変換が正確だと確認できます。負の数でも同様です。
=OCT2DEC(DEC2OCT(-256))
結果は「-256」です。2の補数で表現された10桁の8進数を、OCT2DEC関数が正しく負の数に戻してくれます。
DEC2OCTとOCT2DECの仕様比較
| 項目 | DEC2OCT | OCT2DEC |
|---|---|---|
| 変換方向 | 10進数 → 8進数 | 8進数 → 10進数 |
| 入力 | -536,870,912〜536,870,911の整数 | 最大10桁の8進数文字列 |
| 出力 | テキスト文字列 | 数値(-536,870,912〜536,870,911) |
| 桁数指定 | あり(第2引数) | なし |
OCT2DEC関数には桁数指定がありません。入力は「0」〜「7」の数字のみで構成された最大10桁の文字列です。8や9を含む値を渡すと#NUM!エラーになるので注意してください。
DEC系3関数を比較する(DEC2BIN・DEC2OCT・DEC2HEX)
Excelには10進数から他の進数に変換するDEC系関数が3つあります。構文はすべて 関数名(数値, [桁数]) で同じです。
変換先・有効範囲・主な用途の比較表
| 関数 | 変換先 | 入力範囲 | 主な用途 |
|---|---|---|---|
| DEC2BIN | 2進数 | -512〜511 | ビットフラグ、IPアドレス |
| DEC2OCT ※この記事 | 8進数 | -536,870,912〜536,870,911 | Linuxパーミッション(chmod) |
| DEC2HEX | 16進数 | -549,755,813,888〜549,755,813,887 | カラーコード、メモリアドレス |
3つとも負の数は10桁の2の補数で返す点が共通しています。変換先の進数が大きいほど入力範囲も広がります。
どの関数を選ぶか
迷ったら次の基準で選んでください。
- ビット単位の操作が必要 → DEC2BIN
- Linuxの権限管理 → DEC2OCT(この記事)
- カラーコードやアドレス → DEC2HEX
- 上限を超える大きな値 → BASE関数(Excel 2013以降)
進数変換関数の全体マップ(全12関数)
Excelの進数変換関数は全部で12種類あります。関数名の規則は「変換元 + 2 + 変換先」です。
| 関数名 | 変換方向 |
|---|---|
| DEC2BIN | 10進数 → 2進数 |
| DEC2OCT ※この記事 | 10進数 → 8進数 |
| DEC2HEX | 10進数 → 16進数 |
| BIN2DEC | 2進数 → 10進数 |
| BIN2OCT | 2進数 → 8進数 |
| BIN2HEX | 2進数 → 16進数 |
| OCT2DEC | 8進数 → 10進数 |
| OCT2BIN | 8進数 → 2進数 |
| OCT2HEX | 8進数 → 16進数 |
| HEX2DEC | 16進数 → 10進数 |
| HEX2BIN | 16進数 → 2進数 |
| HEX2OCT | 16進数 → 8進数 |
DEC2OCT関数の逆変換はOCT2DEC関数です。この命名規則を覚えておけば、どの関数を使えばいいか迷いませんよ。
まとめ
ExcelのDEC2OCT関数は、10進数を8進数に変換する関数です。
ポイントを整理します。
- 構文は
=DEC2OCT(数値, [桁数])の最大2引数 - 変換できる範囲は-536,870,912〜536,870,911の整数
- 桁数を指定すると先頭をゼロで埋めて桁揃えできる
- 負の数は10桁の2の補数で返される
- #NUM!エラーは「範囲外」か「桁数不足」が原因
- #VALUE!エラーは文字列を渡したときに発生
- chmodパーミッションの変換に便利
- 536,870,911を超える値にはBASE関数を使う
- 逆変換にはOCT2DEC関数を使う
まずは =DEC2OCT(8) で「10」が返ることを試してみてください。
