ExcelのDEC2OCT関数の使い方|10進数を8進数に変換する方法

スポンサーリンク

「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桁あたりのビット数最大桁数合計ビット数入力範囲
DEC2BIN1ビット10桁10ビット-512〜511
DEC2OCT3ビット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進数10
重み8^1 = 88^0 = 1
計算1 x 8 = 80 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進数)備考
-17777777777全桁7
-100777777763410桁固定
-2567777777400 
-536,870,9124000000000負の最小値

逆変換のOCT2DEC関数を使えば元に戻せます。

=OCT2DEC(DEC2OCT(-100))

結果は「-100」です。正しく往復変換できることを確認できますよ。

桁数を指定してゼロ埋めする

第2引数に桁数を指定すると、先頭にゼロを埋めて桁数を揃えられます。

=DEC2OCT(58, 3)

結果は「072」です。3桁に揃えてくれました。

桁数を指定しない場合と比べてみましょう。

数式結果備考
=DEC2OCT(58)72最小桁数(2桁)
=DEC2OCT(58, 3)0723桁にゼロ埋め
=DEC2OCT(8)10最小桁数(2桁)
=DEC2OCT(8, 4)00104桁にゼロ埋め

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関数の違いを比較します。

項目DEC2OCTBASE
入力範囲-536,870,912〜536,870,9110〜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)r4
書き込み(Write)w2
実行(Execute)x1

この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 755755493rwxr-xr-x
chmod 644644420rw-r–r–
chmod 700700448rwx
chmod 600600384rw-
chmod 777777511rwxrwxrwx

=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の仕様比較

項目DEC2OCTOCT2DEC
変換方向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つあります。構文はすべて 関数名(数値, [桁数]) で同じです。

変換先・有効範囲・主な用途の比較表

関数変換先入力範囲主な用途
DEC2BIN2進数-512〜511ビットフラグ、IPアドレス
DEC2OCT ※この記事8進数-536,870,912〜536,870,911Linuxパーミッション(chmod)
DEC2HEX16進数-549,755,813,888〜549,755,813,887カラーコード、メモリアドレス

3つとも負の数は10桁の2の補数で返す点が共通しています。変換先の進数が大きいほど入力範囲も広がります。

どの関数を選ぶか

迷ったら次の基準で選んでください。

  • ビット単位の操作が必要DEC2BIN
  • Linuxの権限管理 → DEC2OCT(この記事)
  • カラーコードやアドレスDEC2HEX
  • 上限を超える大きな値 → BASE関数(Excel 2013以降)

進数変換関数の全体マップ(全12関数)

Excelの進数変換関数は全部で12種類あります。関数名の規則は「変換元 + 2 + 変換先」です。

関数名変換方向
DEC2BIN10進数 → 2進数
DEC2OCT ※この記事10進数 → 8進数
DEC2HEX10進数 → 16進数
BIN2DEC2進数 → 10進数
BIN2OCT2進数 → 8進数
BIN2HEX2進数 → 16進数
OCT2DEC8進数 → 10進数
OCT2BIN8進数 → 2進数
OCT2HEX8進数 → 16進数
HEX2DEC16進数 → 10進数
HEX2BIN16進数 → 2進数
HEX2OCT16進数 → 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」が返ることを試してみてください。

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