スプレッドシートのDEC2HEX関数|10進数→16進数・ゼロ埋め・RGB

スポンサーリンク

「RGB値をカラーコードに直したいけど、16進数の計算が面倒…」「桁数を揃えた16進数の一覧を作りたい」。そんな場面で手が止まっていませんか?

255を「FF」、128を「80」と暗算で直すのは、慣れていないとミスのもと。1件ずつ電卓で変換していたら、色が20個あるだけで日が暮れてしまいます。

そこで使いたいのが、Googleスプレッドシートの DEC2HEX関数 です。10進数を渡すだけで16進数の文字列に変換でき、桁数を指定すればゼロ埋めまで自動でやってくれます。

まずは結論。よく使う数式はこの3つです。

=DEC2HEX(255)        → FF
=DEC2HEX(75, 4)      → 004B(4桁にゼロ埋め)
="#"&DEC2HEX(A2,2)&DEC2HEX(B2,2)&DEC2HEX(C2,2)   → #RRGGBB

3つ目は、A2・B2・C2 に入れたR・G・Bの値からカラーコードを作る式です。この記事では構文の基本から、ゼロ埋め・RGB変換・一括変換・負の数・エラー対処まで順に見ていきましょう。

スプレッドシートのDEC2HEX関数の使い方(構文と基本例)

DEC2HEX関数(読み方: デック・トゥー・ヘックス)は、10進数を16進数に変換するエンジニアリング関数です。名前は「DEC(Decimal=10進数)to HEX(Hexadecimal=16進数)」の略。

Googleスプレッドシートに標準で入っているので、アドオンなどの準備は要りません。16進数は0〜9とA〜Fの16種類の文字で数を表す書き方で、Webのカラーコードでおなじみですよね。

構文と引数

=DEC2HEX(decimal_number, [significant_digits])

日本語に置き換えると =DEC2HEX(10進数, [桁数]) という形です。第2引数の桁数は省略できます。

引数必須/任意内容
decimal_number(10進数)必須変換したい10進数。-549,755,813,888〜549,755,813,887 の範囲
significant_digits(桁数)任意結果の桁数。結果より大きいと左側を0で埋める

Google公式ヘルプによると、第1引数は数値でも文字列でも受け付けます。=DEC2HEX(100) と =DEC2HEX("100") は、どちらも「64」を返すとされています。

セル参照でも使い方は同じ。A2 に「255」が入っていれば、次の式で「FF」が返ります。

=DEC2HEX(A2)

10進数と16進数の対応表

よく出てくる値を一覧にしました。DEC2HEXの結果のイメージをつかむのに使ってください。

10進数DEC2HEXの結果ひとこと
00 
99ここまでは10進と同じ
10A10をAで表す
15F1桁の最大値
161016で繰り上がる
100646×16+4
255FF15×16+15。カラーコードの最大値
2561003桁目に繰り上がる
4095FFF3桁の最大値
65535FFFF4桁の最大値

16進数は右の桁から1、16、256、4096…と重みが上がっていきます。255なら「15×16+15」なので、15を表すFが2つ並んで「FF」になるわけです。

桁数指定でゼロ埋めする/RGBからカラーコードを作る

DEC2HEXの第2引数を使うと、結果の桁数を揃えられます。カラーコード作りに欠かせない機能なので、しっかり押さえておきましょう。

桁数指定(ゼロ埋め)の考え方

桁数に結果より大きい数を渡すと、足りない分だけ左側に0が付きます。結果より小さい数を渡すと、ゼロ埋めではなくエラーになる点に注意してください。

数式結果ポイント
=DEC2HEX(5)5桁数を省略すると最小の桁数
=DEC2HEX(5, 2)052桁にゼロ埋め
=DEC2HEX(75, 4)004B75は4B。4桁にそろえる
=DEC2HEX(100, 8)00000064公式ヘルプの使用例
=DEC2HEX(255, 1)#NUM!FFは2桁なので1桁に収まらない

ゼロ埋めが効くのは正の数だけです。負の数では桁数が無視されるので、詳しくは後半の「負の数」の章を見てください。

RGBから#RRGGBBを作る色管理表

カラーコードの「#RRGGBB」は、R(赤)・G(緑)・B(青)の値をそれぞれ2桁の16進数にして並べたもの。各値は0〜255なので、桁数に2を指定すれば必ず2桁にそろいます。

A列にR、B列にG、C列にBを入れたら、D2 に次の式を入れて下にコピーしましょう。

="#"&DEC2HEX(A2,2)&DEC2HEX(B2,2)&DEC2HEX(C2,2)
A: RB: GC: BD: カラーコード色のイメージ
25500#FF0000赤
01280#008000緑
2551650#FFA500オレンジ
51102204#3366CC青系
245245245#F5F5F5薄いグレー

桁数の2を付け忘れると、0が「0」の1文字になってしまいます。たとえば緑の行は「#0800」となり、カラーコードとして使えません。

ブランドカラーや資料の配色をこの表で管理しておくと、CSSやスライドの色指定にそのまま貼れて便利です。小文字のコードが欲しいときは、全体を LOWER で包めば「#ffa500」の形にできます。

範囲を一括変換する(ARRAYFORMULA)とBASE関数との使い分け

行が増えるたびに数式をコピーするのは手間ですよね。スプレッドシートなら ARRAYFORMULA を使って、1つのセルから全行を変換できます。

ARRAYFORMULAで1セルから全行変換

A列の10進数をB列に一括変換するなら、B2 に次の式を1つだけ入れます。

=ARRAYFORMULA(IF(A2:A="", "", DEC2HEX(A2:A)))

IF(A2:A="","",…) の部分は、空白行を空欄のまま残すための工夫です。空白セルをDEC2HEXに渡したときの挙動は公式に書かれていません。そのため、最初から空白を除外しておくと安心でしょう。

RGBの色管理表も同じ考え方で、D2 の1セルにまとめられます。

=ARRAYFORMULA(IF(A2:A="", "", "#"&DEC2HEX(A2:A,2)&DEC2HEX(B2:B,2)&DEC2HEX(C2:C,2)))

ARRAYFORMULAの結果が出る範囲に、別の値が入っていると展開できません。B列やD列の2行目より下は空けておいてください。

BASE関数・DECIMAL関数との違い

10進数を16進数にする方法は、DEC2HEXだけではありません。BASE関数を使っても =BASE(255,16) で「FF」が得られます。

比較項目DEC2HEXBASE
変換先16進数のみ2〜36進数を指定
負の数扱える(後述の2の補数)0以上の整数が前提
ゼロ埋め第2引数(桁数)第3引数(最小桁数)
ゼロ埋めの例=DEC2HEX(4095,6) → 000FFF=BASE(4095,16,6) → 000FFF

どちらも、桁数が結果の桁数以上なら同じ答えになります。=DEC2HEX(255,2) と =BASE(255,16,2) は、どちらも「FF」。

違いが出るのは、負の数を扱うときと、16進数以外にも変換したいとき。16進数だけならDEC2HEX、36進数など他の基数も使うならBASE、と覚えておけば迷いません。

逆に、任意の基数の文字列を10進数に戻すときはDECIMAL関数が使えます。=DECIMAL("FF",16) で255に戻せる、BASEと対になる関数です。

DECシリーズ(DEC2BIN/DEC2OCT)との比較

DEC2HEXには、変換先だけが違う兄弟関数があります。扱える範囲がかなり違うので、表で確認しておきましょう。

関数変換先正の最大値
DEC2BIN2進数511
DEC2OCT8進数536,870,911
DEC2HEX16進数549,755,813,887

DEC2BINは負の側も -512 までで、範囲は -512〜511 と狭め。大きな数を扱うなら、範囲がいちばん広いDEC2HEXが向いています。

逆向きに戻す関数は、2進数ならBIN2DEC関数、16進数ならHEX2DEC関数です。

負の数を変換するとどうなる?(40ビットの2の補数)

DEC2HEXは負の数も変換できます。Excel公式の仕様では、「-FF」のようにマイナス記号は付きません。負の数は、40ビットの「2の補数」という形の10桁の16進数で返ります。

負の数は10桁で返り、桁数指定は無視される

2の補数は、コンピューターが負の数を表すときの決まった書き方です。Excelの仕様で計算した代表例を3つ見てみましょう。

数式結果ひとこと
=DEC2HEX(-1)FFFFFFFFFF10桁すべてF
=DEC2HEX(-100)FFFFFFFF9C末尾の9Cに-100の情報
=DEC2HEX(-549755813888)8000000000扱える最小の値

10桁で返るこの表し方は、Excel公式に例として載っているものです。Google公式ヘルプは返り値の形を書いていません。表の値はExcelの仕様から求めたので、実際のシートで確かめてください。

また、Google公式ヘルプには「10進数が負のとき、桁数の指定は無視される」と明記されています。=DEC2HEX(-1, 2) のように2桁を指定しても、2桁の「FF」にはなりません。

先頭が8〜Fなら負数

10桁の結果を見たら、先頭の1文字を確認しましょう。40ビットの2の補数なら、先頭が0〜7で正の数、8〜Fで負の数です。

注意したいのは、この見分け方が「10桁の結果」に限る点です。=DEC2HEX(255) の「FF」は先頭がFですが、2桁なので普通の正の数。

正の数で10桁になるのは、68,719,476,736(16進で1000000000)以上の大きな値だけです。負の数の結果を10進数に戻すなら、HEX2DEC関数に渡してみてください。

エラーの原因と対処(#NUM!・#VALUE!・IFERROR)

DEC2HEXでよく見るエラーは #NUM! と #VALUE! の2つです。原因を知っておけば、表のどこを直せばいいかすぐ分かります。

#NUM!の3原因早見表

原因例根拠
桁数が結果の桁数より少ない=DEC2HEX(255, 1)Google公式ヘルプに明記
10進数が範囲外=DEC2HEX(1000000000000)範囲はGoogle公式に明記。Excel公式では範囲外は #NUM!
桁数に0以下を指定=DEC2HEX(255, 0)Excel公式では #NUM!

いちばん多いのは、1つ目の桁数不足でしょう。RGBの式で桁数を1にしてしまうと、10以上の値でエラーになります。

範囲外と桁数0以下について、Google公式ヘルプは結果のエラー名まで書いていません。Excel公式の仕様では #NUM! なので、スプレッドシートでもエラーになると考えておくと安全です。

#VALUE!とIFERRORでの回避

数値として読めない文字列(”abc” など)を渡すとエラーになります。Excel公式では、このケースは #VALUE! とされています。

手入力のデータや外部から貼り付けた表では、文字や空白が混ざりがち。そんなときは IFERROR で包んで、エラーの代わりに目印を出しておきましょう。

=IFERROR(DEC2HEX(A2, 2), "要確認")

範囲外の値や文字列が入っていても「要確認」と表示されるので、どの行を直すべきか一目で分かります。

Excel版との違い

ExcelにもDEC2HEX関数があり、構文は同じです。両方の公式で一致しているのは、次の3点。

  • 扱える範囲(-549,755,813,888〜549,755,813,887)
  • 負の数では桁数の指定が無視される
  • 桁数が結果より少ないと #NUM! になる

一方で、Google公式ヘルプは負の数の返り値の形や、0以下の桁数・小数の扱いまでは書いていません。こうした細かい挙動は、ファイルをやり取りする前に実際のシートで確かめておくと安心です。

Excelでの使い方はExcelのDEC2HEX関数の解説にまとめています。なお、Excelでは2007以降なら標準で使えます。2003以前は「分析ツール」アドインが必要でした。

よくある質問とまとめ

最後に、DEC2HEXでつまずきやすいポイントをQ&Aで整理します。

FAQ

Q. DEC2HEXの結果は数値?文字列?

A. Google公式ヘルプによると、結果は16進数のテキストです。ただしスプレッドシートは、数字だけの結果を黙って数値に変えてしまうことがあります。

公式の例では、A2 に「100」(10進数256の16進表記)があるとき、=A2+20 は「120」になります。16進数として足し算したわけではないので、計算結果としては誤り。16進数で計算したいときは、HEX2DECで10進数に戻してから計算してください。

Q. 小数を渡すとどうなる?

A. DEC2HEXの公式ヘルプには、小数の扱いが書かれていません。確実に整数で変換したいなら、INT や ROUND で整数にしてから渡すのが無難です。

=DEC2HEX(INT(A2))

Q. 16進数を10進数に戻すには?

A. HEX2DEC関数を使います。カラーコードからRの値を取り出すなら、=HEX2DEC(MID(D2,2,2)) のように2文字ずつ切り出して戻しましょう。

Q. 「0x」を付けたい・小文字にしたい

A. 文字列なので、連結や関数で整えられます。="0x"&DEC2HEX(255) なら「0xFF」、=LOWER(DEC2HEX(255)) なら「ff」です。

まとめ

DEC2HEX関数は、スプレッドシートで10進数を16進数に変換する関数です。ポイントを振り返っておきましょう。

  • 基本は =DEC2HEX(255) で「FF」
  • 桁数を指定すると =DEC2HEX(75,4) で「004B」のようにゼロ埋め
  • RGBは ="#"&DEC2HEX(R,2)&DEC2HEX(G,2)&DEC2HEX(B,2) でカラーコードに
  • 一括変換は ARRAYFORMULA と IF で空白行を除外
  • 負の数は桁数指定が無視され、Excelの仕様では10桁の2の補数で返る
  • 桁数不足や範囲外は #NUM!、心配なら IFERROR で包む

まずは手元のRGB値で、色管理表を1枚作ってみてください。2桁指定の感覚がつかめれば、DEC2BINやDEC2OCTも同じ要領で使えます。

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