概要
Excelの論理関数は、条件判定や分岐処理を行うための基本的かつ重要な機能である。
データの値や条件に応じて処理を変えることで、より柔軟で動的な計算や分析が可能になる。
主な機能として、条件分岐 (IF、IFS系)、論理演算 (AND、OR、NOT系)、エラー処理 (IFERROR、IFNA系)、多分岐処理 (SWITCH)、論理値操作 (TRUE、FALSE)がある。
これらの関数は、データの検証、条件付き計算、エラー処理、複雑な業務ロジックの実装等、様々な場面で活用される。
基本的な条件分岐 (IF関数)
IF関数
条件に応じて異なる値を返す論理関数である。
構文:
=IF(論理式, [真の場合], [偽の場合])
引数の説明:
- 論理式
- TRUEまたはFALSEを返す条件式
- 真の場合
- 論理式がTRUEのときに返す値
- 偽の場合
- 論理式がFALSEのときに返す値 (省略時は FALSE)
使用例:
- =IF(A1>=60, "合格", "不合格")
- A1が60以上なら「合格」、そうでなければ「不合格」
- =IF(A1="", "未入力", A1)
- A1が空白なら「未入力」、そうでなければA1の値
- =IF(A1>0, A1, 0)
- A1が正の数ならその値、そうでなければ0
※注意
真の場合や偽の場合には、数値、文字列、数式、関数を指定できる。
省略した場合、真の場合はTRUE、偽の場合はFALSEが返される。
ネストしたIF関数
IF関数の中にIF関数を入れ子にすることで、複数の条件分岐を実現できる。
使用例:
- =IF(A1>=80, "優", IF(A1>=60, "良", "不可"))
- 80以上は「優」、60以上は「良」、それ以外は「不可」
- =IF(A1="", "", IF(A1>=100, "達成", "未達成"))
- A1が空白なら空白、100以上なら「達成」、それ以外は「未達成」
※注意
ネストは最大64階層まで可能だが、可読性のため3〜4階層程度に抑えることが推奨される。
複雑な条件分岐の場合は、IFS関数やSWITCH関数の使用を検討する。
複数条件分岐 (IFS関数)
IFS関数
複数の条件を順番に評価し、最初に真となった条件に対応する値を返す関数である。
Excel 2016以降で使用可能である。
構文:
=IFS(論理式1, 真の場合1, [論理式2, 真の場合2], ...)
使用例:
- =IFS(A1>=80, "優", A1>=60, "良", A1>=40, "可", TRUE, "不可")
- 複数の成績判定
- =IFS(B1="A", 100, B1="B", 80, B1="C", 60, TRUE, 0)
- ランクに応じた点数割り当て
※注意
条件は上から順に評価され、最初に真となった条件の値が返される。
全ての条件が偽の場合はエラー (#N/A) になるため、最後に TRUE を指定することが推奨される。
ネストしたIFよりも可読性が高い。
IFS関数とネストしたIF関数の比較
同じ処理を実現する場合の比較例。
ネストしたIF関数:
=IF(A1>=80, "優", IF(A1>=60, "良", IF(A1>=40, "可", "不可")))
IFS関数:
=IFS(A1>=80, "優", A1>=60, "良", A1>=40, "可", TRUE, "不可")
IFS関数の方が構造が明確で、条件の追加や変更が容易である。
論理演算関数
AND関数
全ての条件が真 (TRUE) の場合にのみ真を返す関数である。
構文:
=AND(論理式1, [論理式2], ...)
使用例:
- A1とB1が両方とも60以上ならTRUE
- =AND(A1>=60, B1>=60)
- A1、B1、C1の全てが空白でないならTRUE
- =AND(A1<>"", B1<>"", C1<>"")
- IF関数と組み合わせた使用例
- =IF(AND(A1>=60, B1>=60), "合格", "不合格")
※注意
引数は最大255個まで指定可能。
1つでも偽があれば、結果は偽になる。
空白セルは FALSE として評価される。
OR関数
いずれかの条件が真 (TRUE) の場合に真を返す関数である。
構文:
=OR(論理式1, [論理式2], ...)
使用例:
- A1またはB1のいずれかが80以上ならTRUE
- =OR(A1>=80, B1>=80)
- A1が「東京」「大阪」「名古屋」のいずれかならTRUE
- =OR(A1="東京", A1="大阪", A1="名古屋")
- A1またはB1のいずれかが空白なら「入力不足」
- =IF(OR(A1="", B1=""), "入力不足", "OK")
※注意
引数は最大255個まで指定可能。
全てが偽の場合のみ、結果は偽になる。
NOT関数
論理値を反転させる関数である。
構文:
=NOT(論理式)
使用例:
- A1が60未満ならTRUE (60以上でないならTRUE)
- =NOT(A1>=60)
- A1が空白でないならTRUE
- =NOT(A1="")
- A1とB1が両方とも60以上でないなら「不合格」
- =IF(NOT(AND(A1>=60, B1>=60)), "不合格", "合格")
NOTの代替表現:
- =NOT(A1>=60) は =A1<60 と同じ
- =NOT(A1="") は =A1<>"" と同じ
XOR関数
排他的論理和を返す関数である。奇数個の引数が真の場合に真を返す。
Excel 2013以降で使用可能である。
構文:
=XOR(論理式1, [論理式2], ...)
使用例:
- A1とB1のいずれか一方のみが正の数ならTRUE
- =XOR(A1>0, B1>0)
- 奇数個のセルが「はい」ならTRUE
- =XOR(A1="はい", B1="はい", C1="はい")
※注意
2つの引数の場合 : 一方のみが真の場合に真を返す。
3つ以上の引数の場合 : 奇数個が真の場合に真を返す。
論理値定数
TRUE関数 / FALSE関数
論理値 TRUE または FALSE を返す関数である。
構文:
=TRUE() =FALSE()
使用例:
- =TRUE()
- TRUE を返す
- =FALSE()
- FALSE を返す
- =IF(A1>0, TRUE(), FALSE())
- A1が正の数ならTRUE、そうでなければFALSE
※注意
通常は、関数を使わずに直接 TRUE や FALSE と入力することが多い。
IFS関数の最後の条件として =IFS(..., TRUE, "その他") のように使用される。
エラー処理関数
IFERROR関数
数式の結果がエラーの場合に、指定した値を返す関数である。
Excel 2007以降で使用可能。
構文:
=IFERROR(値, エラーの場合の値)
エラーの種類:
IFERROR関数は、以下に示す全てのエラーを捕捉する。
- #N/A
- 値が見つからない
- #VALUE!
- 値のタイプが不正
- #REF!
- 参照が無効
- #DIV/0!
- ゼロ除算
- #NUM!
- 数値が不正
- #NAME?
- 名前が認識されない
- #NULL!
- 範囲の指定が不正
使用例:
- =IFERROR(A1/B1, 0)
- 除算結果がエラーなら0を返す
- =IFERROR(VLOOKUP(A1, C:D, 2, FALSE), "未登録")
- VLOOKUP結果がエラーなら「未登録」を返す
- =IFERROR(A1*B1, "")
- 計算結果がエラーなら空白を返す
※注意
エラーでない場合は、元の値がそのまま返される。
IFNA関数
数式の結果が #N/A エラーの場合にのみ、指定した値を返す関数である。
Excel 2013以降で使用可能。
構文:
=IFNA(値, #N/Aの場合の値)
使用例:
- =IFNA(VLOOKUP(A1, C:D, 2, FALSE), "未登録")
- VLOOKUPが #N/A エラーなら「未登録」を返す
- =IFNA(MATCH(A1, B:B, 0), "該当なし")
- MATCHが #N/A エラーなら「該当なし」を返す
※注意
#N/A 以外のエラーは捕捉されず、そのまま表示される。
VLOOKUP関数 や MATCH関数等の検索関数と組み合わせて使用されることが多い。
IFERROR と IFNA の違い
IFERRORは全てのエラーを処理し、IFNAは #N/A エラーのみを処理する。
比較例:
- =IFERROR(A1/B1, "エラー")
- 全てのエラー (#DIV/0!、#VALUE! 等) でエラーを返す
- =IFNA(A1/B1, "N/A")
- #N/A エラーのみで「N/A」を返す。
- #DIV/0! 等はそのまま表示
検索関数では、データが見つからない場合の #N/A エラーのみを処理する場合が多いため、IFNA関数が適している。
多分岐処理 (SWITCH関数)
SWITCH関数
式の値と一致するものを検索し、対応する結果を返す関数である。
Excel 2016以降で使用可能である。
構文:
=SWITCH(式, 値1, 結果1, [値2, 結果2], ..., [既定値])
使用例:
- 数値に対応する曜日を返す。
- =SWITCH(A1, 1, "月曜", 2, "火曜", 3, "水曜", 4, "木曜", 5, "金曜", "休日")
- ランクに対応する点数を返す。
- =SWITCH(B1, "A", 100, "B", 80, "C", 60, 0)
- 都市名に対応する地域を返す。
- =SWITCH(C1, "東京", "関東", "大阪", "関西", "名古屋", "中部", "その他")
※注意
一致する値が見つからない場合は #N/A エラーになる。
最後に既定値を指定することで、エラーを回避できる。
ネストしたIFやIFS関数よりも簡潔に書ける場合がある。
SWITCH関数 / IFS関数の使い分け
SWITCH関数は値の完全一致で分岐、IFS関数は条件式で分岐する。
SWITCH関数が適している場合:
- 曜日、ランク、区分など、特定の値に基づく分岐
- 値の種類が明確に決まっている場合
IFS関数が適している場合:
- 数値の範囲判定
- >=80、>=60 等
- 複雑な条件式
- AND、OR を含む
実用的な使用例
成績判定
テストの点数に応じて評価を返す例。
基本的な判定:
=IF(A1>=60, "合格", "不合格")
5段階評価:
=IFS(A1>=80, "優", A1>=70, "良", A1>=60, "可", A1>=50, "不可", TRUE, "不可") # または =IF(A1>=80, "優", IF(A1>=70, "良", IF(A1>=60, "可", IF(A1>=50, "不可", "不可"))))
複数条件の組み合わせ
AND関数やOR関数を使った複雑な条件判定の例。
- 両方の科目で合格
- =IF(AND(A1>=60, B1>=60), "合格", "不合格")
- いずれかの科目で優秀
- =IF(OR(A1>=90, B1>=90), "優秀", "普通")
- 全ての項目が入力済み
- =IF(AND(A1<>"", B1<>"", C1<>""), "完了", "未完了")
エラー処理
計算エラーを回避する例。
ゼロ除算エラーの回避:
=IFERROR(A1/B1, 0) # または =IF(B1=0, 0, A1/B1)
VLOOKUP のエラー処理:
=IFERROR(VLOOKUP(A1, C:E, 2, FALSE), "該当なし") # または =IFNA(VLOOKUP(A1, C:E, 2, FALSE), "該当なし")
段階的な手数料計算
金額に応じた手数料率を適用する例。
- 10万円以上は5%、5万円以上は7%、1万円以上は10%、それ以外は15%の手数料を計算する
- =IFS(A1>=100000, A1*0.05, A1>=50000, A1*0.07, A1>=10000, A1*0.1, TRUE, A1*0.15)
曜日による処理
曜日に応じた処理を行う例。
- 曜日の取得
- =TEXT(A1, "aaa")
- 土日の判定
- =IF(OR(TEXT(A1, "aaa")="土", TEXT(A1, "aaa")="日"), "休日", "平日")
- 曜日ごとの担当者
- =SWITCH(WEEKDAY(A1), 1, "田中", 2, "鈴木", 3, "佐藤", 4, "高橋", 5, "渡辺", 6, "伊藤", 7, "山本")
空白チェック
セルの入力状況をチェックする例。
- 空白の場合にメッセージ
- =IF(A1="", "未入力", A1)
- 必須項目のチェック
- =IF(OR(A1="", B1="", C1=""), "入力不足", "入力完了")
ランク分け
数値に応じたランクを割り当てる例。
- 売上高によるランク
- =IFS(A1>=1000000, "S", A1>=500000, "A", A1>=100000, "B", TRUE, "C")
- ランクに応じた報酬
- =SWITCH(B1, "S", 100000, "A", 50000, "B", 20000, "C", 10000, 0)
条件付き計算
条件に応じて異なる計算を行う例。
- 会員種別による割引
- =IF(B1="プレミアム", A1*0.8, IF(B1="スタンダード", A1*0.9, A1))
- 購入数量による単価
- =IFS(A1>=100, 90, A1>=50, 95, A1>=10, 98, TRUE, 100)
複合条件の判定
複数の条件を組み合わせた例。
- 年齢と性別による判定
- =IF(AND(A1="男性", B1>=20, B1<65), "対象", "対象外")
- 複数項目のいずれかが基準を満たす
- =IF(OR(A1>=80, B1>=80, C1>=80), "合格", "不合格")
- 全てが基準を満たさない
- =IF(NOT(OR(A1>=60, B1>=60)), "要注意", "問題なし")