「割引と会員特典を同時に使われていないか確認したい」「午前・午後シフトのどちらか一方だけ入力されているかチェックしたい」。こんな場面で役立つのがXOR関数です。
XOR関数は「片方だけ条件を満たしているか」を1つの数式で判定できます。 AND関数やOR関数では対応できない「排他チェック」を簡潔に書けるのが特徴です。
この記事では、XOR関数の構文と基本的な使い方から、IF関数と組み合わせた実務パターン5つまでを解説します。AND・OR・NOTとの違い、エラーの対処法もまとめています。
スプレッドシートのXOR関数とは?
XOR関数(読み方: エックスオア関数)は、TRUEの個数が奇数個かどうかを判定する関数です。「XOR」は「eXclusive OR」の略で、日本語では「排他的論理和」と呼ばれます。
2つの条件で使う場合は「どちらか一方だけTRUE」のときにTRUEを返します。両方TRUEや両方FALSEではFALSEになります。
XOR関数でできることをまとめると、次のとおりです。
- 2つの条件のうち片方だけ満たしているか判定する
- IF関数と組み合わせて排他チェックの条件分岐を作る
- 最大255個の条件を同時にチェックする
XOR関数単体はTRUE / FALSEを返すだけです。実務ではIF関数と組み合わせて使うことがほとんどですよ。
NOTE
XOR関数はGoogleスプレッドシートの全バージョンで使えます。Excelとの互換性も完全なので、ファイルのやり取りでも安心です。
AND・OR・XOR・NOTの違いを真偽値表で比較
XOR関数を理解するには、AND・ORとの違いを並べて見るのが一番です。
| 論理式1 | 論理式2 | AND | OR | XOR | NOT(論理式1) |
|---|---|---|---|---|---|
| TRUE | TRUE | TRUE | TRUE | FALSE | FALSE |
| TRUE | FALSE | FALSE | TRUE | TRUE | FALSE |
| FALSE | TRUE | FALSE | TRUE | TRUE | TRUE |
| FALSE | FALSE | FALSE | FALSE | FALSE | TRUE |
XOR関数だけ結果のパターンが独特です。AND関数は「両方TRUE」のとき、OR関数は「どちらかTRUE」のときに結果がTRUEになります。XOR関数は「片方だけTRUE」のときだけTRUEです。
「両方同じ → FALSE、片方だけ → TRUE」と覚えておけば大丈夫ですよ。
スプレッドシートのXOR関数の書き方(構文と引数)
基本構文
=XOR(論理式1, [論理式2], ...)
カッコの中に、判定したい条件を1つ以上指定します。条件はカンマで区切って追加できます。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 論理式1 | 必須 | 判定したい条件(例: A2<>“”) |
| 論理式2以降 | 任意 | 追加の条件。最大255個まで指定できる |
引数は1つだけでも動きますが、2つ以上の条件で排他判定をしてこそ真価を発揮します。
TIP
論理式にはセル参照と比較演算子を組み合わせます。テキストを比較するときはダブルクォーテーションで囲んでください。例:
A1="完了"
TRUE/FALSEの判定ルール
XOR関数の判定は「TRUEの個数が奇数かどうか」で決まります。
- TRUEが奇数個 → 結果はTRUE
- TRUEが偶数個(0個を含む) → 結果はFALSE
引数が2つの場合は「片方だけTRUE → TRUE」です。数値を引数に渡した場合は、0がFALSE、0以外がTRUEとして扱われます。
XOR関数の基本的な使い方
2つの条件でどちらか一方だけ判定する
B列に「割引コード」、C列に「会員特典」の適用フラグが入っているとします。どちらか一方だけ適用されているかを判定してみましょう。
=XOR(B2<>"", C2<>"")
B2<>"": 割引コードが入力されているかC2<>"": 会員特典が入力されているか
B2だけに値があれば結果はTRUEです。両方に値がある場合はFALSEになります。両方空欄の場合もFALSEです。
3つ以上の引数を渡したときの動作(奇数個TRUEルール)
XOR関数に3つ以上の引数を渡すと、動作が少し変わります。「片方だけ」ではなく「TRUEが奇数個」かどうかで判定します。
=XOR(TRUE, TRUE, TRUE) → TRUE(TRUEが3個 = 奇数)
=XOR(TRUE, TRUE, FALSE) → FALSE(TRUEが2個 = 偶数)
=XOR(TRUE, FALSE, FALSE) → TRUE(TRUEが1個 = 奇数)
=XOR(FALSE, FALSE, FALSE)→ FALSE(TRUEが0個 = 偶数)
3つ以上の引数ではこのルールが適用されます。「どれか1つだけTRUE」を判定したい場合はXOR関数だけでは実現できません。COUNTIF関数などで工夫が必要です(後述)。
実務で使う場面の多くは引数2つのパターンです。「片方だけ」の判定は2つの条件で使うのが基本ですよ。
IF関数×XOR関数の実務パターン5選
XOR関数の実務での本領発揮は、IF関数との組み合わせです。XOR単体のTRUE/FALSEではなく、条件に応じた文字列や数値を返せるようになります。
基本形はこちらです。
=IF(XOR(条件1, 条件2), TRUE値, FALSE値)
どちらか一方だけ条件を満たしたら「TRUE値」を返します。両方満たす場合と両方満たさない場合は「FALSE値」です。
パターン1: シフト入力の排他チェック
「午前シフト」と「午後シフト」のどちらか一方だけ入力されているか確認する例です。B列に午前、C列に午後のシフトが入っています。
=IF(XOR(B2<>"", C2<>""), "OK", "要確認")
午前だけ、または午後だけ入力されていれば「OK」です。両方入力されている場合や両方空欄の場合は「要確認」になります。ダブルブッキングの防止に役立ちますよ。
パターン2: 連絡方法の二択チェック
「メール希望」と「電話希望」のうち、片方だけ◯になっているかチェックする例です。
=IF(XOR(D2="◯", E2="◯"), "OK", "連絡方法を1つ選択してください")
「メール希望」か「電話希望」のどちらか一方だけ◯になっていれば「OK」です。フォームの入力チェックに組み込んでおくと、確認の手間が減りますよ。
パターン3: 承認・否認フラグの整合性チェック
「承認」と「否認」のフラグが両方立っていないか、または両方空欄になっていないかを確認します。
=IF(XOR(F2="承認", F2="否認"), "正常", "フラグ確認")
実際には1セルを使う例が多いので、2セルで管理するパターンで書くとより実用的です。
=IF(XOR(G2="承認", H2="否認"), "排他OK", "確認が必要です")
承認か否認のどちらか一方にフラグが立っていれば正常です。
パターン4: 割引の重複適用チェック
「早割」と「クーポン割引」を同時に使えない設定の場合、どちらか一方だけ適用されているか確認します。
=IF(XOR(I2>0, J2>0), "割引適用OK", IF(AND(I2=0,J2=0), "割引未適用", "重複エラー"))
両方0なら「割引未適用」、どちらか一方だけ入力なら「割引適用OK」、両方入力なら「重複エラー」を表示します。
パターン5: 3列以上で「どれか1つだけ」を判定する
3つ以上の選択肢で「どれか1つだけ選択されているか」を判定したい場合は、XOR関数ではなくCOUNTIF関数を使います。
=IF(COUNTIF(K2:M2, "◯")=1, "OK", "選択肢は1つにしてください")
K2:M2 の範囲で◯が1つだけなら「OK」を返します。XOR関数の3引数以上では「奇数個TRUE」ルールになってしまうため、「1つだけ」の判定はCOUNTIF関数が確実です。
TIP
条件分岐を3段階以上に分けたい場合は、IFS関数も検討してみてください。
よくあるエラーと対処法
XOR関数で「結果がおかしい」「エラーが出る」というときの原因と対処法をまとめます。
| エラー・症状 | 原因 | 対処法 |
|---|---|---|
| #VALUE! | 引数に文字列を直接指定した(例: =XOR("はい", "いいえ")) | 比較演算子を使う(例: =XOR(A1="はい", B1="いいえ")) |
| 予想と逆の結果(3引数) | 「片方だけ」ではなく「奇数個TRUE」ルールで動作している | 引数が2つになるよう条件を整理する |
| 参照先のエラーが伝播 | 参照セルに#N/Aなどのエラーがある | IFERROR関数でエラーを事前に処理する |
| #ERROR! | 括弧の閉じ忘れ・カンマの過不足 | 数式バーで括弧の対応を確認する |
| 数値が0のときFALSE | 0はFALSEとして扱われる仕様 | 0を有効値にしたい場合は A1>=0 のように比較式にする |
3つ以上の引数は注意が必要
XOR関数を3つ以上の引数で使うと、直感と異なる結果になることがあります。
=XOR(TRUE, TRUE, TRUE) → TRUE(3個=奇数なのでTRUE)
3つすべてTRUEなのにTRUEが返ります。「片方だけ」を期待していると混乱しますよね。排他チェックには引数を2つに限定するのがおすすめです。
AND・OR・XOR・NOTの使い分け
| 関数 | 判定ルール | 使いどころ |
|---|---|---|
| AND | すべてTRUE → TRUE | 「かつ」の条件判定 |
| OR | 1つ以上TRUE → TRUE | 「または」の条件判定 |
| XOR | TRUEが奇数個 → TRUE | 「どちらか一方だけ」の判定 |
| NOT | TRUE⇔FALSEを反転 | 条件の否定 |
迷ったときは次の基準で選んでみてください。
- すべての条件を満たす必要がある → AND関数
- どれか1つ満たせばOK → OR関数
- 片方だけ満たしているかチェックしたい → XOR関数
- 条件をひっくり返したい → NOT関数
実務で使用頻度が高いのはAND関数とOR関数です。XOR関数は排他チェックという限定的な場面で力を発揮します。
よくある質問
XOR関数はExcelでも使えますか?
はい、ExcelにもXOR関数があり、Googleスプレッドシートと完全に同じ書式・動作です。Excel 2013以降で利用できます。スプレッドシートとExcel間でファイルを共有しても計算結果は変わりません。
3つ以上の条件で「どれか1つだけTRUE」を判定する方法はありますか?
XOR関数の3引数以上では「TRUEが奇数個」というルールになるため、「どれか1つだけ」の判定はできません。=COUNTIF(範囲, TRUE)=1 を使う方法が確実です。たとえば =IF(COUNTIF(B2:D2,TRUE)=1,"OK","NG") のように書くと3列のうち1列だけTRUEかどうかをチェックできます。
XOR関数の引数にセル範囲(例: A1:A5)を指定できますか?
指定できます。=XOR(A1:A5) のように範囲を渡すと、その範囲内のTRUEの個数が奇数かどうかを判定します。ただし範囲指定では「どのセルがTRUEか」を特定できないため、実務では個別のセル参照か比較式を引数にする使い方が一般的です。
NOT(AND())やNOT(OR())とXOR関数は何が違いますか?
NOT(AND(A,B)) は「AとBが両方TRUEでない」、NOT(OR(A,B)) は「AもBもTRUEでない」を返します。XOR関数は「AとBのうち片方だけTRUE」を返す点が異なります。「両方FALSEのとき」の動作を比較すると、NOT(OR(A,B)) ならTRUEですが、XOR関数はFALSEになります。「どちらか一方だけ」という排他条件にはXOR関数がもっとも直感的です。
まとめ
XOR関数は、条件のうちどちらか一方だけが当てはまるかを判定する論理関数です。
- 2つの条件では「片方だけTRUE → TRUE」
- 3つ以上の条件では「TRUEが奇数個 → TRUE」
- IF関数と組み合わせて排他チェックの条件分岐を作るのが定番
- 3列以上で「1つだけ選択」を判定したい場合はCOUNTIF関数が確実
まずはIF関数×XOR関数の組み合わせから試してみてください。シフトの排他チェックや入力フォームのバリデーションなど、実務で活躍する場面がありますよ。
複数条件でデータを数えたい場合は、COUNTIFS関数も合わせてチェックしてみてください。
