「16進数のカラーコードや2進数のデータを、10進数に変換したい…」
他のシステムから受け取ったN進数のデータを手計算で変換するのは大変ですよね。
桁ごとに基数のべき乗を掛けて足し合わせる作業は、時間もかかるしミスの元です。
そんなときに使えるのがDECIMAL関数です。N進数の文字列と基数を指定するだけで、10進数の数値に一発変換できます。
この記事では基本の書き方からBASE関数との使い分けまで紹介します。
DECIMAL関数とは?
DECIMAL関数(読み方: デシマル関数)は、N進数の文字列を10進数の数値に変換する関数です。
名前の「DECIMAL」は「10進数の」を意味する英語からきています。
たとえば =DECIMAL("FF", 16) と書くと「255」が返ります。16進数のFFを10進数に変換した結果ですね。
DECIMAL関数にできることをまとめると、次のとおりです。
- 2進数・8進数・16進数の文字列を10進数に変換する
- 2〜36進数まで好きな基数を指定できる
- BASE関数と組み合わせて検算できる
- 大文字・小文字を区別せずに変換できる
NOTE
DECIMAL関数はGoogleスプレッドシートの全バージョンで使えます。Excelにも同名の関数があり、互換性は完全です。
DECIMAL関数の書き方(構文と引数)
基本構文
=DECIMAL(値, 基数)
カッコの中に変換元のN進数の文字列と、その文字列が何進数であるかを示す基数を指定します。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値 | 必須 | 変換元のN進数を表す文字列 |
| 基数 | 必須 | 変換元の基数(2〜36の整数) |
値には文字列を指定します。セル参照でも直接入力でもOKです。直接入力するときはダブルクォーテーション(")で囲んでください。基数は2〜36の範囲で指定できます。大文字と小文字は区別されないので、"FF" でも "ff" でも同じ結果になります。
DECIMAL関数の基本的な使い方
16進数を10進数に変換する
もっともよく使われるパターンです。
=DECIMAL("FF", 16)
結果は「255」です。16進数のFFを10進数に変換しています。
=DECIMAL("1A", 16)
結果は「26」です。16進数では10〜15をA〜Fの文字で表します。1Aは1×16+10=26です。
2進数を10進数に変換する
IT系のデータ処理でよく使われる変換です。
=DECIMAL("1010", 2)
結果は「10」です。2進数の1010を10進数に変換すると10になります。
=DECIMAL("11111111", 2)
結果は「255」です。2進数で8桁の11111111は10進数の255ですね。
8進数を10進数に変換する
ファイルのパーミッション(権限設定)などで使われる8進数の変換です。
=DECIMAL("10", 8)
結果は「8」です。8進数の10は10進数の8になります。
=DECIMAL("377", 8)
結果は「255」です。
セル参照を使う
A1に「FF」が入っているとします。
=DECIMAL(A1, 16)
結果は「255」です。セル参照を使えば、値を変えるだけで結果が自動更新されます。
特殊なケース
0を変換した場合は「0」が返ります。
=DECIMAL("0", 2)
結果は「0」です。
小文字で指定しても同じ結果が返ります。
=DECIMAL("ff", 16)
結果は「255」です。"FF" と同じ結果ですね。
DECIMAL関数の実践的な使い方・応用例
BASE関数と組み合わせて検算する
BASE関数で変換した結果をDECIMAL関数で元に戻せば、変換が正しいかどうか検算できます。
=BASE(255, 16)
結果は「FF」です。
=DECIMAL("FF", 16)
結果は「255」です。元の数値に戻りましたね。
1つの数式にまとめて検算することも可能です。
=DECIMAL(BASE(100, 8), 8)
結果は「100」です。元の値と一致すれば、変換は正しいといえます。
16進数カラーコードをRGB値に変換する
Webデザインなどで使われる16進数のカラーコード(例: FF8000)から、R・G・Bそれぞれの値を取り出せます。
A1に「FF8000」が入っているとします。
=DECIMAL(MID(A1,1,2), 16)
結果は「255」です。先頭2文字「FF」を赤(R)の値に変換しています。
=DECIMAL(MID(A1,3,2), 16)
結果は「128」です。3〜4文字目「80」を緑(G)の値に変換しています。
=DECIMAL(MID(A1,5,2), 16)
結果は「0」です。5〜6文字目「00」を青(B)の値に変換しています。
TIP
MID関数で文字列を2文字ずつ切り出して、それぞれをDECIMALで10進数に変換するのがポイントです。
2進数のビット列から10進数に一括変換する
複数のセルに2進数のデータが並んでいるとき、隣の列にDECIMAL関数を入れれば一括で10進数に変換できます。
A列に2進数のデータ(「1010」「1100」「1111」など)が入っているとします。
=DECIMAL(A1, 2)
この数式を下方向にコピーすれば、すべての行で10進数に変換されます。
BASE関数との違い・使い分け
| 関数 | 動作 | 用途 |
|---|---|---|
| BASE | 10進数 → N進数に変換 | 2進数・16進数などへの変換 |
| DECIMAL | N進数 → 10進数に変換 | 16進数カラーコードの数値化など |
逆関数の関係
DECIMAL関数とBASE関数は逆関数の関係にあります。BASEで変換した結果をDECIMALに渡すと、元の値に戻ります。
BASE(100, 2) → "1100100"
DECIMAL("1100100", 2) → 100
つまり「10進数 → N進数」がBASE、「N進数 → 10進数」がDECIMALです。
使い分けの目安
DECIMAL関数を使う場面:
- 16進数のカラーコードを数値に変換したい
- 2進数や8進数のデータを10進数で計算したい
- 他システムから受け取ったN進数データを数値化したい
BASE関数を使う場面:
- 10進数の数値を2進数・8進数・16進数で表示したい
- カラーコードを生成したい
- ビット列を作成したい
TIP
DECIMALは「10進数に戻る」変換、BASEは「10進数から出る」変換と覚えるとわかりやすいです。BASE関数の詳しい使い方はスプレッドシートのBASE関数の使い方で解説しています。
戻り値の型の違い
もうひとつ大きな違いがあります。
- DECIMAL関数の戻り値は数値。そのまま計算に使えます
- BASE関数の戻り値は文字列。算術演算には使えません
=DECIMAL("FF", 16) + 1
この数式は「256」を返します。DECIMALの結果は数値なので、そのまま足し算できます。
よくあるエラーと対処法
DECIMAL関数で発生しやすいエラーをまとめました。
| エラー | 原因 | 対処法 |
|---|---|---|
| #NUM! | 基数が範囲外(2未満または36超) | 基数は2〜36の整数にする |
| #NUM! | 値に基数で無効な文字が含まれている | 使用可能な文字を確認する |
| #VALUE! | 引数が空または不正な型 | セル参照先を確認する |
| #ERROR! | 構文ミス(カッコ忘れ等) | 数式の入力内容を見直す |
基数に対して無効な文字を指定したとき
もっとも多いエラーです。たとえば2進数には0と1しか使えません。
=DECIMAL("123", 2)
この数式は#NUM!エラーになります。2進数で「2」や「3」は使えないためです。
同様に、8進数では0〜7の数字しか使えません。
=DECIMAL("89", 8)
この数式も#NUM!エラーです。8進数で「8」や「9」は無効な文字です。
基数が範囲外のとき
基数は2〜36の整数を指定する必要があります。
=DECIMAL("10", 1)
この数式は#NUM!エラーになります。1進数は存在しないため、2以上を指定してください。
値をダブルクォーテーションで囲み忘れたとき
DECIMAL関数の第1引数は文字列です。直接入力する場合はダブルクォーテーションが必要です。
=DECIMAL(FF, 16)
この数式はエラーになります。正しくは次のように書きます。
=DECIMAL("FF", 16)
NOTE
セル参照の場合はダブルクォーテーションは不要です。A1にFFと入力されていれば
=DECIMAL(A1, 16)でそのまま使えます。
Excelとの違い
DECIMAL関数はExcelとGoogleスプレッドシートで完全に同じ動作です。
| 項目 | Excel | Googleスプレッドシート |
|---|---|---|
| 構文 | =DECIMAL(文字列, 基数) | =DECIMAL(値, 基数) |
| 動作 | N進数を10進数に変換 | N進数を10進数に変換 |
| 基数の範囲 | 2〜36 | 2〜36 |
| エラー時 | #NUM! / #VALUE! | #NUM! / #VALUE! |
引数名の表記が若干異なるだけで、機能は完全に同じです。ExcelのDECIMAL関数についてはExcelのDECIMAL関数の記事で詳しく解説しています。
まとめ
DECIMAL関数は、N進数の文字列を10進数の数値に変換する関数です。
ポイントを整理します。
- 構文は
=DECIMAL(値, 基数)で、2〜36進数から10進数に変換できる - 16進数・2進数・8進数からの変換がよく使われる
- 大文字・小文字を区別しないので、
"FF"でも"ff"でも同じ結果 - 戻り値は数値型。そのまま計算に使える(BASE関数の文字列型とは逆)
- BASE関数は逆関数の関係。DECIMALで戻した値をBASEに渡すと元のN進数に戻る
- Excelとの互換性も完全で、ファイルのやり取りでも安心
- 同じ数学系の関数としてGCD関数(最大公約数)やLCM関数(最小公倍数)もあわせて覚えておくと便利
まずは =DECIMAL("FF", 16) で「FFを10進数に → 255」から試してみてください。
