「設定値の2進数『11110000』、16進数だと何になるんだっけ…」そんなふうに手が止まったことはありませんか。
4桁ずつ対応表と見比べる作業は、桁が増えるほど読み違いが起きがち。先頭が1の10桁なら、見慣れない「FFFFFFFF…」まで出てきます。
そこで使いたいのが、GoogleスプレッドシートのBIN2HEX関数です。書き方とゼロ埋め、10桁の上限と負の数、10桁超えの変換、#NUM! エラーの直し方までまとめました。
スプレッドシートのBIN2HEX関数とは?書き方と変換の例
BIN2HEX関数は、2進数を16進数に変換するエンジニアリング関数です。読み方は「バイナリ・トゥ・ヘックス」。BIN(Binary=2進数)と HEX(Hexadecimal=16進数)を、2(to)でつないだ名前です。
0と1の並びを入れると、0〜9とA〜Fで表した16進数が返ります。標準関数なので、アドオンなどの準備は要りません。逆向きの16進→2進なら、HEX2BIN関数を使いましょう。
構文と引数(signed_binary_number・significant_digits)
=BIN2HEX(符号付き2進数, [有効桁])
英語版の公式ヘルプでの引数名は、signed_binary_number と significant_digits。この記事では「符号付き2進数」「有効桁」と呼びます。
| 引数 | 必須/任意 | 内容 |
|---|---|---|
| 符号付き2進数 | 必須 | 変換したい2進数。使えるのは0と1だけで、10桁(10ビット)まで |
| 有効桁 | 任意 | 結果の最小桁数。結果が短いときは左側を0で埋める |
公式ヘルプでは2進数を文字列で指定する前提ですが、有効な2進数なら数値でも自動で変換されます。=BIN2HEX(11111) と =BIN2HEX("11111") は、どちらも 1F。
=BIN2HEX(“11111”) で 1F になる仕組み(4ビットと16進の対応表)
2進数の4桁は、16進数のちょうど1桁にあたります。変換の中身は「右から4桁ずつ区切って、1桁ずつ置き換える」だけ。
| 2進数(4桁) | 16進数 | 10進数 |
|---|---|---|
| 0000 | 0 | 0 |
| 0001 | 1 | 1 |
| 0010 | 2 | 2 |
| 0011 | 3 | 3 |
| 0100 | 4 | 4 |
| 0101 | 5 | 5 |
| 0110 | 6 | 6 |
| 0111 | 7 | 7 |
| 1000 | 8 | 8 |
| 1001 | 9 | 9 |
| 1010 | A | 10 |
| 1011 | B | 11 |
| 1100 | C | 12 |
| 1101 | D | 13 |
| 1110 | E | 14 |
| 1111 | F | 15 |
「11111」なら、右から区切ると 1 と 1111。足りない左側を0で補うと 0001 と 1111 になり、1 と F を並べて 1F です。
8桁の「11110000」も同じで、1111=F、0000=0 から F0 になります。結果を検算するときに、この表を使ってください。
BIN2HEX関数の基本の使い方:直接入力・ゼロ埋め・一括変換
ここからは、直接入力・桁ぞろえ・一括変換の順に、実際の式で動きを見ていきましょう。
2進数を直接入力・セル参照で変換する
いちばんシンプルなのは、2進数を「”」で囲んで直接書く方法です。
=BIN2HEX("1010")
=BIN2HEX("11111111")
1つ目は A、2つ目は FF です。8桁(1バイト)すべてが1なら、16進数では FF の2文字に収まります。
実務ではセル参照が中心でしょう。A2 に「11110000」が入っていれば、=BIN2HEX(A2) で F0 が返ります。
結果は16進数の文字列ですが、計算に使うと思わぬ値になることも。詳しくはエラーの章で説明しますね。
桁数を指定してゼロ埋めする(significant_digits)
第2引数の有効桁を指定すると、結果が短いときに左側が0で埋まります。公式ヘルプの例では、=BIN2HEX("11111",8) が 0000001F です。
| 数式 | 結果 |
|---|---|
| =BIN2HEX(“11111”) | 1F |
| =BIN2HEX(“11111”,8) | 0000001F |
| =BIN2HEX(101,8) | 00000005 |
| =BIN2HEX(“1010”,2) | 0A |
| =BIN2HEX(“11110000”,4) | 00F0 |
1バイト単位でそろえるなら2、2バイトなら4が目安。有効桁が結果の桁数より少ないと、#NUM! になります。
公式ヘルプには、有効桁の上限・下限が書かれていません。0や負の数、小数は避け、1〜10 の整数で指定しておくのが無難です。
ARRAYFORMULAで列をまとめて変換する
列全体を一度に変換したいなら、ARRAYFORMULA と組み合わせましょう。B2 に次の式を入れると、結果が B2〜B5 に展開されます。
=ARRAYFORMULA(BIN2HEX(A2:A5,2))
| A列(2進数) | B列(結果) |
|---|---|
| 1 | 01 |
| 1010 | 0A |
| 11111 | 1F |
| 11110000 | F0 |
空白セルが混ざると、その行がエラーや意図しない値になる場合も。IF で空白行を空欄のまま残しておくと安心です。
=ARRAYFORMULA(IF(A2:A10="","",BIN2HEX(A2:A10,2)))
BIN2HEX関数の10桁の上限と負の数(FFFFFFFFFFになる理由)
BIN2HEX でいちばん戸惑いやすいのが、10桁の上限と負の数。仕組みを知っておけば、結果を見て慌てずに済みます。
入力できるのは10桁(10ビット)まで
公式ヘルプによると、第1引数は符号付き10ビットの2進数です。入力は10桁までと考え、11桁以上は #NUM! の原因になると覚えておきましょう。
=BIN2HEX("0111111111")
=BIN2HEX("00000000001")
1つ目は10桁なので変換でき、結果は 1FF。2つ目は値としては1でも、11文字で上限を超えています。エラーが出たら、先頭に余分な0が付いていないか確認しましょう。
先頭が1の10桁は負の数として扱われる
10ビットのうち、いちばん左の桁は符号(プラスかマイナスか)を表します。先頭が1の10桁は負の数とみなされ、2の補数という表し方で読まれるのです。
その結果、左側に F が並ぶ10桁の16進数が返ります。これが「FFFFFFFFFF」の正体。
| 入力(2進数) | 10進数での意味 | 結果(16進数) |
|---|---|---|
| 0111111111 | 511(正の最大) | 1FF |
| 0000000001 | 1 | 1 |
| 1111111111 | -1 | FFFFFFFFFF |
| 1111111110 | -2 | FFFFFFFFFE |
| 1000000000 | -512(負の最小) | FFFFFFFE00 |
扱える範囲は、10進数で -512〜511 です。先頭が1でも9桁以下なら正の数なので、「111111111」は 1FF になります。
ビットフラグなど負の数を想定しないデータで FFFFFFFF… が出たら、10桁目の1が符号と解釈されたサイン。正の数として変換したいなら、次の章の BASE 関数を使いましょう。
負の数では桁数指定が無視される
公式ヘルプには、先頭ビットが1のとき有効桁は無視されるとあります。=BIN2HEX("1111111111",4) としても4桁にはならず、FFFFFFFFFF の10桁のままです。
列の桁がそろわないときは、負の数が混ざっていないか確かめてください。
10桁を超える2進数を16進数にする方法
12ビットや16ビットのデータは、BIN2HEX では変換できません。代わりの方法を2つ紹介します。
BASE関数とDECIMAL関数を組み合わせる
おすすめは、DECIMAL関数で2進数をいったん10進数にし、BASE関数で16進数に直す方法です。
=BASE(DECIMAL(A2,2),16)
DECIMAL(A2,2) が A2 を2進数として10進数にし、BASE(…,16) が16進数に直す仕組み。A2 が「111111111111」(12桁)なら、4095 を経由して FFF になります。
桁をそろえたいときは、BASE の第3引数に最小桁数を指定しましょう。
=BASE(DECIMAL(A2,2),16,4)
A2 が「1111」なら、結果は 000F。考え方は BIN2HEX の有効桁と同じです。
DECIMAL の第1引数は、文字列で渡すのが基本。2進数の列を書式なしテキストにしておけば、先頭の0も消えません。
8桁ずつ区切ってBIN2HEXでつなぐ方法
もう1つは、長い2進数を8桁ずつ区切って BIN2HEX で変換し、つなぐ方法です。8桁なら上限にかからず、先頭が1でも負の数になりません。
16桁の「1010101111001101」なら、前半の 10101011 が AB、後半の 11001101 が CD。つなげると ABCD です。
=BIN2HEX(LEFT(A2,8),2)&BIN2HEX(RIGHT(A2,8),2)
この式は16桁ちょうどの値が前提。桁数がまちまちなら、BASE と DECIMAL の方法が向いています。
カラーコードにも応用できます。赤・緑・青の2進数を B2・C2・D2 に入れておけば、次の式で6桁のコードに。
="#"&BIN2HEX(B2,2)&BIN2HEX(C2,2)&BIN2HEX(D2,2)
たとえば 11111111・10000000・00000000 なら「#FF8000」(オレンジ)。
BIN2HEXとBASEの結果を比べる(使い分け)
10桁以内の正の数なら、2つの方法は同じ結果です。違いが出るのは、先頭が1の10桁と11桁以上の値。
| 入力(2進数) | =BIN2HEX(A2) | =BASE(DECIMAL(A2,2),16) |
|---|---|---|
| 11111 | 1F | 1F |
| 0111111111 | 1FF | 1FF |
| 1111111111 | FFFFFFFFFF(-1) | 3FF(1023) |
| 111111111111 | #NUM! | FFF |
DECIMAL は2進数を符号なしで読むため、1111111111 は 1023 になります。BASE も0以上の整数が前提なので、2の補数の形は作れません。
負の数(2の補数)として扱うなら BIN2HEX。10桁超えや、正の数として変換したい値は BASE と DECIMAL の出番です。
BIN2HEX関数のエラーとつまずきの直し方
エラーの原因を種類別に整理しました。表の「例」の式を試すと、切り分けが早くなります。
#NUM!エラーが出る原因と直し方
| 原因 | 例 | 直し方 |
|---|---|---|
| 0と1以外の文字がある | =BIN2HEX("102") | 2進数で使えない文字(2〜9など)を取り除く |
| 11桁以上ある | =BIN2HEX("00000000001") | 先頭の余分な0を外して10桁以内にする。長い値は BASE と DECIMAL で変換 |
| 有効桁が足りない | =BIN2HEX("11111111",1) | 有効桁を結果の桁数以上にするか、省略する |
公式ヘルプが挙げる原因は、0と1以外の数字と有効桁の不足の2つ。10桁の上限超えも候補に加えておきましょう。
ログから貼り付けた値には、スペースや「0b」のような接頭辞が付いていることも。変換前に取り除いておくと確実です。
=BIN2HEX(REGEXREPLACE(TO_TEXT(A2),"^0[bB]|s",""),8)
TO_TEXT で文字列にし、先頭の 0b と空白を消してから変換する式です。隣の列に =REGEXMATCH(TO_TEXT(A2),"^[01]{1,10}$") を置けば、10桁以内の2進数だけ TRUE になります。
#VALUE!エラーが出る原因と直し方
#VALUE! は、引数の種類が合わないときに出るエラーです。BIN2HEX での発生条件は公式ヘルプにないため、次の2点を確認してください。
- 有効桁に数値以外が入っていないか(例:
=BIN2HEX("1010","abc")) - 第1引数が空白のセルを指していないか
有効桁をセル参照で渡すなら、参照先に文字や見出しが入っていないかも確認を。空白セルは、ARRAYFORMULA の節の IF で避けられます。
先頭の0が消える・結果が10進数として計算される
数字だけの値は、スプレッドシートが数値として受け取ります。「00001111」と入力しても、セルの中身は 1111。
BIN2HEX の結果はどちらも F なので、変換には影響しません。困るのは、元の2進数を8桁のまま残したい場合です。
列を選んで「表示形式」→「数字」→「書式なしテキスト」にしてから入力しましょう。1件だけなら、'00001111 のように先頭に ' を付けても構いません。
もう1つの落とし穴が、結果を計算に使う場面。公式ヘルプによると、A〜F を含まない結果は計算時に10進数として扱われます。
公式の例は、「100010001」を変換した 111 が A2 にあるケース。=A2+9 は 120 になりますが、16進数の 111 に 9 を足した正しい答えは 11A です。
16進数として計算するなら、HEX2DEC で10進数に戻して計算し、DEC2HEX で16進数に戻しましょう。
=DEC2HEX(HEX2DEC(A2)+9)
この式なら 273+9=282 を経由して、11A が返ります。
Excelとの違い・関連関数とまとめ
最後に、Excel 版との違いと関連関数を確認し、要点を振り返りましょう。
ExcelのBIN2HEX関数との違い
関数名と引数の並びは Excel と同じ。第2引数の名前だけ、Excel は places(桁数)、スプレッドシートは significant_digits(有効桁)です。
Microsoft の説明でも、入力は10桁まで、負の数は桁数指定を無視して10桁を返すとされています。桁数が結果より小さいと #NUM! になる点も同じ説明。
ただし、0b 付きの値や空白セルの扱いまで同じとは限りません。ファイルをやり取りするなら、両方で結果を見比べておくと安心でしょう。
Excel での使い方は、ExcelのBIN2HEX関数の解説にまとめています。
基数変換の関連関数一覧
2進数・16進数まわりの変換関数を、変換の向きごとにまとめました。
| 関数 | 変換の向き | こんなときに |
|---|---|---|
| HEX2BIN | 16進→2進 | BIN2HEX の結果を2進数に戻す |
| BIN2DEC | 2進→10進 | 2進数の値を計算に使う |
| BIN2OCT | 2進→8進 | 8進数で表したい |
| DEC2HEX | 10進→16進 | 10進数から直接16進数にする |
| HEX2DEC | 16進→10進 | 16進数の結果を検算・計算する |
| DECIMAL | N進→10進 | 10桁を超える2進数を10進数にする |
| BASE | 10進→N進 | 10進数を16進数など任意の進数にする |
BIN2DEC と DEC2HEX の二段変換でも作れますが、BIN2HEX なら1回で済みます。10桁を超えるときだけ、DECIMAL と BASE に切り替えましょう。
まとめ
スプレッドシートのBIN2HEX関数のポイントです。
- 構文は
=BIN2HEX(符号付き2進数, [有効桁])。2進数の4桁が16進数の1桁 - 有効桁に2や4を指定すると、左側が0で埋まって桁がそろう
- 入力は10桁まで。先頭が1の10桁は負の数になり、FFFFFFFF… の10桁で返る
- 10桁を超える2進数は
=BASE(DECIMAL(A2,2),16)で変換する - #NUM! は0と1以外の文字・11桁以上・有効桁の不足を確認する
- 結果を計算に使うときは、HEX2DEC で10進数に戻してから
まずは手元の2進数に =BIN2HEX(A2,2) を入れて、16進数に変わる様子を確かめてみてください。
