Excelで2つの数値の「違い」だけをビット単位で取り出したいけれど、どうすればいいかわからない。そんな場面はありませんか?
ビット演算のなかでも「排他的論理和(XOR)」は少しとっつきにくいですよね。でも、フラグのON/OFF切り替えやデータの差分チェックなど、業務で便利な場面が意外と多いんです。
この記事では、ExcelのBITXOR関数の使い方を基本から丁寧に解説します。構文や引数だけでなく、フラグトグル・差分検出・簡易暗号化の実務3パターンも紹介。エラー対処法まで網羅しているので、ぜひ最後まで読んでみてください。
ExcelのBITXOR関数とは?
BITXOR関数(読み方:ビット・エクスクルーシブ・オア)は、ビット単位のXOR演算(排他的論理和)を行う関数です。関数名は「Bitwise Exclusive OR」の略に由来します。
「排他的論理和」とは、2つの数値を2進数に変換して、同じ位置のビットが異なるときだけ1を返す計算のことです。AND演算が「両方1」で1を返すのに対して、XOR演算は「片方だけ1」のときに1を返します。
XOR演算の真理値表
XOR演算のルールはとてもシンプルです。真理値表で確認しておきましょう。
| ビットA | ビットB | XOR結果 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
つまり「2つの値が違うところだけを抜き出す」演算ですね。
利用できるバージョン
BITXOR関数はExcel 2013以降で利用できます。Microsoft 365、Excel for the web、Excel for Mac でも問題なく使えますよ。
BITXOR関数の構文と引数
基本構文
=BITXOR(数値1, 数値2)
引数は2つとも必須です。省略するとエラーになります。
引数の詳細
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 数値1 | 必須 | XOR演算を行う1つ目の数値(0以上の整数) |
| 数値2 | 必須 | XOR演算を行う2つ目の数値(0以上の整数) |
どちらの引数にも、0以上かつ(2^48)-1(= 281,474,976,710,655)以下の整数を指定します。この範囲を超えると#NUM!エラーになるので注意してくださいね。
BITXOR関数の基本的な使い方
まずはシンプルな使い方から見ていきましょう。
数値を直接指定する方法
セルに次のように入力します。
=BITXOR(5, 12)
結果は 9 になります。
この計算を2進数で確認してみましょう。
- 5 = 0101(2進数)
- 12 = 1100(2進数)
- XOR = 1001(2進数)= 9(10進数)
ビットが異なる桁(1桁目と4桁目)だけが1になっているのがポイントです。
セル参照で指定する方法
A1セルに「13」、B1セルに「11」が入っているとします。次のように書きます。
=BITXOR(A1, B1)
結果は 6 です。
- 13 = 1101(2進数)
- 11 = 1011(2進数)
- XOR = 0110(2進数)= 6(10進数)
DEC2BIN関数(10進数を2進数の文字列に変換する関数)を使うと、途中の2進数変換も確認できますよ。
=DEC2BIN(A1)
'--- 結果: "1101" ---
=DEC2BIN(B1)
'--- 結果: "1011" ---
同じ数値同士のXORは必ず0
BITXOR関数には覚えておきたい性質があります。同じ数値同士でXOR演算を行うと、結果は必ず 0 になります。
=BITXOR(7, 7)
結果は 0 です。すべてのビットが同じなので、XOR結果はすべて0になるわけですね。この性質は、2つの値が一致しているかどうかの判定に使えます。
BITXOR関数の実務活用例3パターン
「XOR演算って実務で使うの?」と思った方もいるかもしれません。実は、フラグの切り替えやデータ比較で活躍する場面があるんです。代表的な3パターンを紹介します。
活用例1: フラグのON/OFF切り替え(トグル)
システムの設定をビットフラグで管理しているケースを考えてみましょう。
| ビット位置 | 設定項目 | 値 |
|---|---|---|
| 1桁目 | 通知ON | 1 |
| 2桁目 | ダークモード | 2 |
| 3桁目 | 自動保存 | 4 |
現在の設定値が「5」(= 0101)の場合、「通知ON」と「自動保存」がONの状態です。
ここで「ダークモード(= 2)」のON/OFFを切り替えたいときは、次のようにBITXOR関数を使います。
=BITXOR(5, 2)
結果は 7(= 0111)です。ダークモードがONに切り替わりました。
もう一度同じ操作をすると、元に戻ります。
=BITXOR(7, 2)
結果は 5(= 0101)。ダークモードがOFFに戻りましたね。
XOR演算には「同じ値で2回XORすると元に戻る」性質があります。そのため、フラグの切り替えにぴったりです。チェックボックスの状態管理や、複数設定の一括反転にも応用できます。
活用例2: 2つの値の差分チェック
BITXOR関数の結果が0なら、2つの値は完全に一致しています。この性質を使って、データの差分チェックができます。
=IF(BITXOR(A2, B2)=0, "一致", "不一致")
A列とB列の値を比較して、ビット単位で違いがあるかどうかを判定できますよ。
さらに、BITXOR関数の結果を2進数に変換すると、どのビットが異なるかも一目でわかります。
=DEC2BIN(BITXOR(A2, B2))
結果のなかで「1」になっている桁が、値が異なる位置です。設定値の差分を可視化するときに便利な使い方ですね。
活用例3: 簡易的なデータの暗号化と復号
XOR演算には「同じキーで2回XORすると元に戻る」という性質があります。この仕組みを使えば、簡易的なデータの暗号化ができます。
たとえば、元の値が「42」でキーが「15」の場合を見てみましょう。
暗号化:
=BITXOR(42, 15)
結果は 37 です。元の値「42」が「37」に変換されました。
復号(同じキーで再度XOR):
=BITXOR(37, 15)
結果は 42 です。元の値に戻りましたね。
本格的な暗号化には専用のツールが必要ですが、社内で数値データをちょっと隠したいときに使えるテクニックです。なお、同じキーを使い回すと脆弱になるので、本格運用には向きません。
他のExcelビット演算関数との使い分け
Excelにはビット演算関数がいくつか用意されています。場面に応じて使い分けましょう。
| 関数 | 演算 | 説明 | 使いどころ |
|---|---|---|---|
| BITAND | AND(論理積) | 両方1のビットだけ残す | 権限チェック・フラグ抽出 |
| BITOR | OR(論理和) | どちらか1のビットを残す | 権限の付与・フラグ追加 |
| BITXOR | XOR(排他的論理和) | 異なるビットだけ残す | フラグの切り替え・差分検出 |
| BITLSHIFT | 左シフト | ビットを左にずらす | 値の2倍・4倍計算 |
| BITRSHIFT | 右シフト | ビットを右にずらす | 値の半分計算 |
BITXOR関数は「フラグのON/OFFを切り替える」ときに使います。一方、特定のフラグが立っているか確認するならBITAND関数、フラグを追加するならBITOR関数が適しています。
3つを組み合わせると、ビットフラグによる権限管理や設定管理を柔軟に実装できますよ。
BITXOR関数のよくあるエラーと対処法
BITXOR関数で発生しやすいエラーをまとめました。
#NUM! エラー
次のいずれかに該当すると#NUM!エラーになります。
- 引数に負の数を指定した場合(例:
=BITXOR(-1, 5)) - 引数に(2^48)-1を超える値を指定した場合
- 引数に小数を指定した場合(例:
=BITXOR(2.5, 1))
対処法: 引数には0以上の整数を指定してください。小数が入る可能性があるなら、INT関数(小数点以下を切り捨てる関数)で整数に変換しましょう。
=BITXOR(INT(A1), INT(B1))
範囲外の値が混ざる可能性があるなら、IF関数で事前にチェックする方法もあります。
=IF(AND(A1>=0, A1<2^48), BITXOR(A1, B1), "範囲外")
#VALUE! エラー
引数に文字列を指定すると#VALUE!エラーになります。
対処法: セル参照の場合は、参照先が数値であることを確認しましょう。VALUE関数(文字列を数値に変換する関数)で変換する方法もあります。
=BITXOR(VALUE(A1), VALUE(B1))
エラーを抑制してデフォルト値を返したいときは、IFERROR関数と組み合わせます。
=IFERROR(BITXOR(A1, B1), 0)
BITXOR関数のFAQ
Q1. BITXOR関数はどのExcelバージョンから使えますか?
Excel 2013以降で利用できます。Microsoft 365、Excel for the web、Excel for Mac でも問題なく使えます。Excel 2010 以前では使えないので、互換性が必要な環境では注意してください。
Q2. なぜ引数の上限が(2^48)-1なのですか?
ExcelのBITXOR関数は48ビット符号なし整数の範囲で動作するためです。これは約281兆という大きな値なので、日常的な業務で上限に達することはほとんどありません。
Q3. 3つ以上の数値をXORする方法はありますか?
BITXOR関数は引数を2つしか受け取れません。3つ以上の値をXORするには、ネストして使います。例えば3つの値A1・B1・C1をXORするなら、=BITXOR(BITXOR(A1, B1), C1) と書きます。XOR演算は結合律が成り立つので、組み合わせる順番を変えても結果は同じです。
Q4. BITXOR関数の結果はなぜ10進数で表示されるのですか?
ExcelのBITXOR関数は、戻り値を必ず10進数で返す仕様です。2進数として確認したい場合は、DEC2BIN関数で変換しましょう。=DEC2BIN(BITXOR(5, 12)) と書けば、結果「9」が2進数表記「1001」で表示されます。
Q5. フラグ管理以外でBITXOR関数が役立つ場面はありますか?
データの差分検出や簡易的なチェックサム計算で使えます。例えば、複数の数値をすべてXORした結果を保持しておけば、後から「元の値が変更されていないか」を簡易的に検証できます。本格的なエラー検出にはCRCなどの専用アルゴリズムが必要ですが、簡易チェック程度なら十分に機能します。
まとめ
この記事では、ExcelのBITXOR関数の使い方を解説しました。
- BITXOR関数は2つの数値のビット単位のXOR演算(排他的論理和)を行う関数
- 引数は2つとも必須で、0以上かつ(2^48)-1以下の整数を指定する
- 「同じ値で2回XORすると元に戻る」性質があり、フラグの切り替えに便利
- フラグトグル・差分検出・簡易暗号化の3パターンで実務にも活用できる
- BITANDやBITORなど、他のビット演算関数と組み合わせるとさらに便利
- #NUM!エラーは0以上の整数、#VALUE!エラーは数値型で対処する
ビット演算は一見むずかしそうに見えますが、BITXOR関数を使えばExcelで手軽に計算できます。まずは基本のフラグ切り替えから試してみてくださいね。