スプレッドシートのBIN2HEX関数の使い方|2進→16進とエラーの直し方

スポンサーリンク

「設定値の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進数
000000
000111
001022
001133
010044
010155
011066
011177
100088
100199
1010A10
1011B11
1100C12
1101D13
1110E14
1111F15

「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列(結果)
101
10100A
111111F
11110000F0

空白セルが混ざると、その行がエラーや意図しない値になる場合も。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進数)
0111111111511(正の最大)1FF
000000000111
1111111111-1FFFFFFFFFF
1111111110-2FFFFFFFFFE
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)
111111F1F
01111111111FF1FF
1111111111FFFFFFFFFF(-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進数まわりの変換関数を、変換の向きごとにまとめました。

関数変換の向きこんなときに
HEX2BIN16進→2進BIN2HEX の結果を2進数に戻す
BIN2DEC2進→10進2進数の値を計算に使う
BIN2OCT2進→8進8進数で表したい
DEC2HEX10進→16進10進数から直接16進数にする
HEX2DEC16進→10進16進数の結果を検算・計算する
DECIMALN進→10進10桁を超える2進数を10進数にする
BASE10進→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進数に変わる様子を確かめてみてください。

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