📘 基礎知識: 初級編
IF関数の基本構文
IF関数は、条件に応じて異なる値を返すExcelの最も基本的な論理関数です。
=IF(論理式, 真の場合, 偽の場合)構文の説明:
- 論理式: 判定したい条件(TRUE または FALSE を返す式)
- 真の場合: 条件が TRUE のときに返す値
- 偽の場合: 条件が FALSE のときに返す値
基本的な使い方
例1: 合否判定
// A列に点数、B列に判定結果
=IF(A2>=60, "合格", "不合格")例2: 数値の比較
// 目標達成判定
=IF(B2>=C2, "達成", "未達成")例3: 空白チェック
// データ入力確認
=IF(A2="", "未入力", "入力済み")実務での基本実例
シナリオ1: 勤怠管理
// 出勤時刻が9:00より後なら「遅刻」
=IF(A2>TIME(9,0,0), "遅刻", "定時")
// 残業時間の計算(8時間超過分)
=IF(B2>8, B2-8, 0)シナリオ2: 在庫管理
// 在庫が10個以下なら「発注必要」
=IF(A2<=10, "発注必要", "在庫充足")
// 在庫金額の計算(在庫がある場合のみ)
=IF(A2>0, A2*B2, 0)シナリオ3: 売上管理
// 売上目標の達成判定
=IF(D2>=E2, "目標達成", "目標未達成")
// ボーナス計算(目標達成時のみ)
=IF(D2>=E2, D2*0.05, 0)💼 実務の技術: 中級編
ネストされたIF関数(多段階判定)
基本的なネスト構造
=IF(条件1, 結果1, IF(条件2, 結果2, IF(条件3, 結果3, それ以外)))例: 成績評価(5段階)
=IF(A2>=90, "S", IF(A2>=80, "A", IF(A2>=70, "B", IF(A2>=60, "C", "D"))))例: 販売手数料の段階計算
// 売上額に応じた手数料率
// 100万円以上: 10%
// 50万円以上: 7%
// 30万円以上: 5%
// それ以下: 3%
=IF(A2>=1000000, A2*0.1, IF(A2>=500000, A2*0.07, IF(A2>=300000, A2*0.05, A2*0.03)))AND・OR関数との組み合わせ
AND関数: 複数条件をすべて満たす
=IF(AND(条件1, 条件2, 条件3), 真の場合, 偽の場合)実務例1: 昇給判定
// 勤続年数3年以上 かつ 評価A以上
=IF(AND(B2>=3, C2="A"), "昇給対象", "対象外")実務例2: 発注判定
// 在庫10個以下 かつ 発注済みでない
=IF(AND(A2<=10, B2<>"発注済み"), "発注必要", "")実務例3: プロジェクト承認
// 予算内 かつ 期限内 かつ 承認者確認済み
=IF(AND(C2<=D2, E2<=TODAY(), F2="済"), "承認", "保留")OR関数: いずれかの条件を満たす
=IF(OR(条件1, 条件2, 条件3), 真の場合, 偽の場合)実務例1: 緊急対応フラグ
// VIP顧客 または 高額案件 または 緊急案件
=IF(OR(B2="VIP", C2>=5000000, D2="緊急"), "優先対応", "通常対応")実務例2: 休日判定
// 土曜日 または 日曜日
=IF(OR(WEEKDAY(A2)=1, WEEKDAY(A2)=7), "休日", "平日")実務例3: アラート表示
// 期限切れ または 在庫切れ または 未承認
=IF(OR(A2<TODAY(), B2=0, C2=""), "要確認", "")NOT関数との組み合わせ
// 「合格」以外の場合
=IF(NOT(A2="合格"), "再試験", "")
// 空白でない場合
=IF(NOT(A2=""), A2*1.1, "")中級レベルでの実用例
実用例1: 請求書の消費税計算
// 軽減税率対応(食品は8%、その他は10%)
=IF(B2="食品", A2*0.08, A2*0.1)
// 金額に応じた消費税(1万円未満は非課税)
=IF(A2>=10000, A2*0.1, 0)実用例2: 勤務シフト管理
// 勤務時間帯による手当計算
// 22:00以降は深夜手当25%増し
=IF(A2>=TIME(22,0,0), B2*1.25, B2)
// 休日出勤判定と割増計算
=IF(OR(WEEKDAY(A2)=1, WEEKDAY(A2)=7), C2*1.35, C2)実用例3: 顧客ランク判定
// 年間購入額によるランク分け
=IF(A2>=1000000, "プラチナ", IF(A2>=500000, "ゴールド", IF(A2>=100000, "シルバー", "ブロンズ")))
// ランクに応じた割引率
=IF(B2="プラチナ", 0.2, IF(B2="ゴールド", 0.15, IF(B2="シルバー", 0.1, 0.05)))実用例4: プロジェクト進捗管理
// 進捗率と期限から状態判定
=IF(AND(A2<100, B2<TODAY()), "遅延", IF(A2=100, "完了", "進行中"))
// 残日数による警告表示
=IF(B2-TODAY()<=3, "緊急", IF(B2-TODAY()<=7, "注意", ""))🎓 専門技術: 上級編
IFS関数(Excel 2019/365)
複数のIF文をネストする代わりに、よりシンプルに記述できます。
=IFS(条件1, 結果1, 条件2, 結果2, 条件3, 結果3, ...)従来のネストIF:
=IF(A2>=90, "S", IF(A2>=80, "A", IF(A2>=70, "B", IF(A2>=60, "C", "D"))))IFS関数を使用:
=IFS(A2>=90, "S", A2>=80, "A", A2>=70, "B", A2>=60, "C", TRUE, "D")実務例: 配送料金の計算
=IFS(
A2>=10000, 0, // 1万円以上: 送料無料
A2>=5000, 500, // 5千円以上: 500円
A2>=3000, 700, // 3千円以上: 700円
TRUE, 1000 // それ以下: 1000円
)SWITCH関数(Excel 2019/365)
特定の値に応じて結果を返す場合に便利です。
=SWITCH(式, 値1, 結果1, 値2, 結果2, ..., [既定値])実務例: 部署コードから部署名
=SWITCH(A2,
"S", "営業部",
"K", "企画部",
"H", "開発部",
"G", "総務部",
"不明"
)実務例: 曜日による営業時間
=SWITCH(WEEKDAY(A2),
1, "休業", // 日曜日
7, "10:00-18:00", // 土曜日
"9:00-20:00" // 平日
)配列数式との組み合わせ
SUMPRODUCT + IF の代替
// 条件付き合計(従来)
=SUMIF(A2:A100, "営業部", B2:B100)
// IF + SUMPRODUCT(複雑な条件)
=SUMPRODUCT(IF(A2:A100="営業部", IF(C2:C100>=100000, B2:B100, 0), 0))動的配列関数との組み合わせ(Excel 365)
// FILTER + IF
=IF(COUNTA(FILTER(A2:A100, B2:B100="営業部"))>0,
FILTER(A2:A100, B2:B100="営業部"),
"該当なし")
// MAP関数での応用
=MAP(A2:A10, LAMBDA(x, IF(x>100, x*1.1, x)))エキスパートテクニックでの実用例
実用例1: 複雑な価格計算システム
// 顧客ランク、数量、時期を考慮した価格計算
=IF(
AND(D2="プラチナ", B2>=100),
A2*B2*0.7, // プラチナ会員で大量購入: 30%割引
IF(
AND(D2="ゴールド", B2>=50),
A2*B2*0.8, // ゴールド会員で中量購入: 20%割引
IF(
AND(MONTH(C2)=12, B2>=30),
A2*B2*0.85, // 12月で一定量購入: 15%割引
IF(B2>=10, A2*B2*0.95, A2*B2) // 10個以上: 5%割引
)
)
)IFS関数での改善版:
=A2*B2*IFS(
AND(D2="プラチナ", B2>=100), 0.7,
AND(D2="ゴールド", B2>=50), 0.8,
AND(MONTH(C2)=12, B2>=30), 0.85,
B2>=10, 0.95,
TRUE, 1
)実用例2: 動的な承認フロー判定
// 金額と部署による承認者の自動判定
=IF(B2<=100000, "課長承認",
IF(B2<=500000, "部長承認",
IF(B2<=1000000, "本部長承認",
IF(AND(B2>1000000, A2="営業部"), "営業担当役員承認",
IF(AND(B2>1000000, A2<>"営業部"), "管理担当役員承認",
"取締役会承認"
)
)
)
)
)実用例3: エラーハンドリング付き計算
// 安全な割り算(ゼロ除算エラー回避)
=IF(B2=0, "計算不可", A2/B2)
// より高度なエラー処理
=IF(OR(A2="", B2="", B2=0),
"データ不足",
IF(A2/B2>1000, "異常値", A2/B2)
)
// IFERROR との組み合わせ
=IFERROR(
IF(B2>0, A2/B2, "ゼロ除算"),
"計算エラー"
)実用例4: 日付ベースの自動処理
// 契約更新通知(更新日の30日前から通知)
=IF(AND(E2-TODAY()<=30, E2-TODAY()>0),
"更新手続き開始",
IF(E2<TODAY(), "期限切れ", "")
)
// 年齢計算と区分判定
=IF(
DATEDIF(B2, TODAY(), "Y")<20, "未成年",
IF(DATEDIF(B2, TODAY(), "Y")<65, "成人",
"シニア"
)
)
// 四半期判定
=IF(MONTH(A2)<=3, "Q1",
IF(MONTH(A2)<=6, "Q2",
IF(MONTH(A2)<=9, "Q3", "Q4")
)
)実用例5: テキスト処理との組み合わせ
// メールアドレスの妥当性チェック
=IF(AND(ISNUMBER(FIND("@", A2)), ISNUMBER(FIND(".", A2)), LEN(A2)>5),
"有効",
"無効"
)
// 電話番号フォーマットチェック
=IF(AND(LEN(A2)=10, ISNUMBER(VALUE(A2))),
"正常",
"形式エラー"
)
// 敬称の自動付与
=IF(B2="男性", A2&"様", IF(B2="女性", A2&"様", A2&"御中"))⚡ プロフェッショナル技術
パフォーマンス最適化のヒント
1. 計算順序の最適化
❌ 非効率な例:
// 複雑な計算を何度も実行
=IF(VLOOKUP(A2,Sheet2!A:B,2,0)>100,
VLOOKUP(A2,Sheet2!A:B,2,0)*1.1,
VLOOKUP(A2,Sheet2!A:B,2,0)*0.9
)✅ 最適化された例:
// 補助列(C列)にVLOOKUPの結果を保存
C2: =VLOOKUP(A2,Sheet2!A:B,2,0)
// D列で判定
D2: =IF(C2>100, C2*1.1, C2*0.9)2. 揮発性関数の回避
❌ 避けるべき:
// TODAY()やNOW()を複数回使用
=IF(A2<TODAY(), "期限切れ", IF(B2>TODAY(), "未来日付", "有効"))✅ 推奨:
// 別セルに TODAY() を1回だけ記載(例: Z1セル)
Z1: =TODAY()
// 数式では参照を使用
=IF(A2<$Z$1, "期限切れ", IF(B2>$Z$1, "未来日付", "有効"))3. 条件の順序最適化
// ❌ 非効率(レアケースを先に判定)
=IF(A2>1000000, "特大", IF(A2>100000, "大", IF(A2>10000, "中", "小")))
// ✅ 効率的(頻出ケースを先に判定)
// データの90%が「小」の場合
=IF(A2<=10000, "小", IF(A2<=100000, "中", IF(A2<=1000000, "大", "特大")))大規模データの時短テクニック
テクニック1: 配列数式の活用(Ctrl+Shift+Enter)
// 1つの数式で複数行を一括処理
// A2:A1000の範囲に対して
{=IF(A2:A1000>100, "大", "小")}テクニック2: テーブル機能の活用
// テーブル化(Ctrl+T)後の数式
=IF([@売上]>=[@目標], "達成", "未達成")
// メリット: 自動的に全行に適用され、範囲が動的に拡張テクニック3: 条件付き書式での代替
// 数式の代わりに条件付き書式を使用
// ルール: =A2>100
// 書式: 赤色の塗りつぶし
// メリット: 計算負荷が軽減され、視覚的にも分かりやすいエキスパートテクニックの使用例
使用例1: 動的な参照範囲
// INDIRECTとIFの組み合わせ
=IF(A2="東京",
SUM(INDIRECT("東京支店!B2:B100")),
SUM(INDIRECT("大阪支店!B2:B100"))
)
// OFFSETとの組み合わせ
=IF(B2>0,
SUM(OFFSET(A2, 0, 0, B2, 1)),
0
)使用例2: 名前付き範囲との組み合わせ
// 名前定義: 営業部範囲 = Sheet1!$A$2:$A$100
// 名前定義: 企画部範囲 = Sheet1!$B$2:$B$100
=IF(C2="営業部",
VLOOKUP(D2, 営業部範囲, 2, 0),
VLOOKUP(D2, 企画部範囲, 2, 0)
)使用例3: LET関数との組み合わせ(Excel 365)
// 複雑な計算を変数化して可読性向上
=LET(
売上, A2,
原価, B2,
利益率, (売上-原価)/売上,
IF(利益率>=0.3, "優良", IF(利益率>=0.2, "良好", "要改善"))
)📋 ベストプラクティス
実務でのベストプラクティス
1. 可読性を重視した数式設計
❌ 悪い例:
=IF(AND(A2>=60,B2="Y"),IF(C2>80,"A",IF(C2>60,"B","C")),"不可")✅ 良い例:
// 改行とインデントを使用(数式バーで Alt+Enter)
=IF(AND(A2>=60, B2="Y"),
IF(C2>80, "A",
IF(C2>60, "B", "C")
),
"不可"
)2. 補助列の戦略的使用
// 複雑な条件を段階的に分解
// C列: 基本判定
=IF(A2>=60, "合格", "不合格")
// D列: 詳細評価
=IF(C2="合格",
IF(B2>=90, "優秀", IF(B2>=75, "良好", "普通")),
"再試験"
)
// E列: 最終判定
=IF(D2="優秀", "表彰対象", "")3. エラー処理の徹底
// レベル1: 基本的なエラー処理
=IFERROR(IF(B2>0, A2/B2, 0), "エラー")
// レベル2: 詳細なエラー処理
=IF(OR(A2="", B2=""), "データ未入力",
IF(B2=0, "ゼロ除算エラー",
IF(ISNUMBER(A2/B2), A2/B2, "計算エラー")
)
)
// レベル3: エラーログ機能付き
=IF(ISERROR(A2/B2),
"エラー: "&TEXT(NOW(),"yyyy/mm/dd hh:mm"),
A2/B2
)標準化された命名規則
セル参照の命名
// 名前定義の例
売上目標 = Sheet1!$E$2
達成率閾値 = 0.8
ボーナス率 = 0.05
// 数式での使用
=IF(A2>=売上目標*達成率閾値, A2*ボーナス率, 0)数式のコメント化
// セルのコメント(メモ)に記載:
/*
【判定ロジック】
- 売上が目標の80%以上: ボーナス支給(売上の5%)
- それ以外: ボーナスなし
【更新履歴】
2025/10/01: 閾値を70%→80%に変更
2025/10/15: ボーナス率を3%→5%に変更
*/定期的なデータクリーニング
クリーニング用IF式
// 1. 余分なスペースの除去
=IF(A2<>"", TRIM(A2), "")
// 2. 全角数字を半角に変換
=IF(ISNUMBER(A2), A2, IF(A2<>"", ASC(A2), ""))
// 3. 日付形式の統一
=IF(ISDATE(A2), TEXT(A2, "yyyy/mm/dd"), "")
// 4. 重複データのフラグ
=IF(COUNTIF($A$2:A2, A2)>1, "重複", "")
// 5. 異常値の検出
=IF(OR(A2<0, A2>1000000), "要確認", A2)その他のベストプラクティス
1. ドキュメント化の習慣
| セル位置 | 数式の目的 | 更新日 | 担当者 |
|---|---|---|---|
| D2 | 売上ボーナス計算 | 2025/10/15 | 山田 |
2. バージョン管理
// 数式の変更履歴を残す
// 旧: =IF(A2>100, "大", "小")
// 新: =IF(A2>100, "大", IF(A2>50, "中", "小"))
// 変更日: 2025/10/15
// 理由: 中間区分の追加要望3. テスト用データの準備
| テスト項目 | 入力値 | 期待結果 | 実際の結果 | 判定 |
|---|---|---|---|---|
| 最小値 | 0 | “小” | =IF(A2>100,”大”,”小”) | OK |
| 境界値-1 | 99 | “小” | =IF(A2>100,”大”,”小”) | OK |
| 境界値 | 100 | “小” | =IF(A2>100,”大”,”小”) | OK |
| 境界値+1 | 101 | “大” | =IF(A2>100,”大”,”小”) | OK |
4. 数式の段階的構築
// ステップ1: 基本形
=IF(A2>100, "大", "小")
// ステップ2: 条件追加
=IF(A2>100, "大", IF(A2>50, "中", "小"))
// ステップ3: エラー処理追加
=IF(A2="", "", IF(A2>100, "大", IF(A2>50, "中", "小")))
// ステップ4: 最終形(書式設定も追加)
=IFERROR(
IF(A2="", "",
IF(A2>100, "大",
IF(A2>50, "中", "小")
)
),
"エラー"
)🔧 シナリオとトラブルシューティング
実務シナリオ1: プロジェクト予算管理システム
データ構造
| A列: プロジェクト名 | B列: 予算額 | C列: 執行額 | D列: 部署 | E列: 期限 | F列: ステータス |
|---|
実装例
1. 予算執行率の判定
// G列: 執行率
=IF(B2=0, "予算未設定", C2/B2)
// H列: 執行状況
=IF(B2=0, "予算未設定",
IF(C2/B2>1, "予算超過",
IF(C2/B2>=0.9, "予算逼迫",
IF(C2/B2>=0.7, "順調", "余裕あり")
)
)
)2. 期限管理とアラート
// I列: 期限状況
=IF(E2="", "期限未設定",
IF(F2="完了", "完了済み",
IF(E2<TODAY(), "期限超過",
IF(E2-TODAY()<=7, "期限間近",
IF(E2-TODAY()<=30, "要注意", "")
)
)
)
)3. 総合判定(優先度設定)
// J列: 優先度
=IF(OR(H2="予算超過", I2="期限超過"), "最優先",
IF(OR(H2="予算逼迫", I2="期限間近"), "優先",
IF(AND(H2="余裕あり", I2=""), "低", "通常")
)
)4. 承認フロー判定
// K列: 必要な承認
=IF(B2="", "予算申請必要",
IF(C2>B2,
IF(C2-B2>B2*0.1, "役員承認必要", "部長承認必要"),
IF(AND(C2/B2>=0.8, E2-TODAY()<=30), "進捗報告必要", "")
)
)5. ダッシュボード用サマリー
// 別シートのサマリー
// 予算超過プロジェクト数
=COUNTIF(Sheet1!H:H, "予算超過")
// 期限超過プロジェクト数
=COUNTIF(Sheet1!I:I, "期限超過")
// 最優先対応が必要なプロジェクト数
=COUNTIF(Sheet1!J:J, "最優先")
// 部署別の予算執行率
=IF(COUNTIF(Sheet1!D:D, "営業部")>0,
SUMIF(Sheet1!D:D, "営業部", Sheet1!C:C) /
SUMIF(Sheet1!D:D, "営業部", Sheet1!B:B),
"該当なし"
)実務シナリオ2: 人事評価システム
データ構造
| A列: 社員名 | B列: 部署 | C列: 勤続年数 | D列: 業績評価 | E列: 行動評価 | F列: 出勤率 |
|---|
実装例
1. 総合評価の算出
// G列: 総合評価
=IF(OR(D2="", E2="", F2=""), "評価未完了",
IF(AND(D2="S", E2="S", F2>=0.98), "S",
IF(AND(OR(D2="S", D2="A"), OR(E2="S", E2="A"), F2>=0.95), "A",
IF(AND(D2>="B", E2>="B", F2>=0.90), "B",
IF(F2<0.80, "D", "C")
)
)
)
)2. 昇給・昇格判定
// H列: 昇給判定
=IF(G2="評価未完了", "判定不可",
IF(AND(G2="S", C2>=3), "特別昇給",
IF(AND(OR(G2="S", G2="A"), C2>=2), "昇給",
IF(AND(G2="B", C2>=5), "昇給", "据え置き")
)
)
)
// I列: 昇格判定
=IF(G2="評価未完了", "判定不可",
IF(AND(G2="S", C2>=5, B2<>"役員"), "昇格候補",
IF(AND(G2="A", C2>=7), "昇格検討", "")
)
)3. ボーナス係数の計算
// J列: ボーナス係数
=IF(G2="評価未完了", 0,
IF(G2="S", 2.5,
IF(G2="A", 2.0,
IF(G2="B", 1.5,
IF(G2="C", 1.0, 0.5)
)
)
)
)
// K列: 勤続加算
=IF(C2>=20, 0.5,
IF(C2>=10, 0.3,
IF(C2>=5, 0.2, 0)
)
)
// L列: 最終ボーナス係数
=IF(J2=0, 0, J2+K2)実務シナリオ3: 在庫管理・発注システム
データ構造
| A列: 商品名 | B列: 現在庫 | C列: 安全在庫 | D列: 発注点 | E列: 前月販売数 | F列: 発注状況 |
|---|
実装例
1. 在庫状態の判定
// G列: 在庫状態
=IF(B2=0, "在庫切れ",
IF(B2<C2, "安全在庫割れ",
IF(B2<=D2, "発注点到達",
IF(B2>E2*3, "過剰在庫", "適正")
)
)
)2. 発注判定と発注量計算
// H列: 発注判定
=IF(F2="発注済み", "処理中",
IF(OR(G2="在庫切れ", G2="安全在庫割れ", G2="発注点到達"),
"発注必要",
""
)
)
// I列: 推奨発注量
=IF(H2="発注必要",
IF(B2=0, E2*2, // 在庫切れの場合は2ヶ月分
IF(B2<C2, C2*2-B2, // 安全在庫の2倍まで補充
E2*1.5-B2 // 1.5ヶ月分まで補充
)
),
0
)3. 優先度とアラート
// J列: 発注優先度
=IF(H2<>"発注必要", "",
IF(G2="在庫切れ", "緊急",
IF(AND(G2="安全在庫割れ", E2>50), "高",
IF(G2="発注点到達", "中", "低")
)
)
)
// K列: アラートメッセージ
=IF(J2="緊急", "【緊急】即時発注が必要です",
IF(J2="高", "【重要】早急な発注を推奨します",
IF(J2="中", "発注タイミングです", "")
)
)トラブルシューティング
よくあるエラー1: #VALUE! エラー
原因: 数値が期待される場所にテキストが入力されている
❌ エラーが発生する例:
=IF(A2>100, "大", "小")
// A2に "abc" などのテキストが入っている場合✅ 解決方法:
// 方法1: ISNUMBER で事前チェック
=IF(ISNUMBER(A2), IF(A2>100, "大", "小"), "数値エラー")
// 方法2: IFERROR で包む
=IFERROR(IF(A2>100, "大", "小"), "データエラー")
// 方法3: VALUE関数で変換
=IF(VALUE(A2)>100, "大", "小")よくあるエラー2: #DIV/0! エラー
原因: ゼロで割り算をしている
❌ エラーが発生する例:
=IF(A2/B2>0.5, "達成", "未達成")
// B2が0の場合✅ 解決方法:
// 方法1: 事前にゼロチェック
=IF(B2=0, "計算不可", IF(A2/B2>0.5, "達成", "未達成"))
// 方法2: IFERRORを使用
=IFERROR(IF(A2/B2>0.5, "達成", "未達成"), "計算不可")
// 方法3: 複合条件
=IF(AND(B2<>0, A2/B2>0.5), "達成", IF(B2=0, "計算不可", "未達成"))よくあるエラー3: #N/A エラー
原因: VLOOKUP等の検索関数で値が見つからない
❌ エラーが発生する例:
=IF(VLOOKUP(A2, Sheet2!A:B, 2, 0)>100, "大", "小")✅ 解決方法:
// 方法1: IFNA関数を使用(Excel 2013以降)
=IFNA(IF(VLOOKUP(A2, Sheet2!A:B, 2, 0)>100, "大", "小"), "データなし")
// 方法2: IFERRORを使用
=IFERROR(IF(VLOOKUP(A2, Sheet2!A:B, 2, 0)>100, "大", "小"), "データなし")
// 方法3: COUNTIF で事前確認
=IF(COUNTIF(Sheet2!A:A, A2)>0,
IF(VLOOKUP(A2, Sheet2!A:B, 2, 0)>100, "大", "小"),
"データなし"
)よくあるエラー4: #REF! エラー
原因: 参照先のセルや範囲が削除された
✅ 解決方法:
// 方法1: 名前付き範囲を使用
// 数式: =IF(A2>売上目標, "達成", "未達成")
// 方法2: テーブル参照を使用
// 数式: =IF([@売上]>[@目標], "達成", "未達成")
// 方法3: INDIRECT関数で動的参照(ただし揮発性なので注意)
=IF(A2>INDIRECT("設定!B2"), "達成", "未達成")よくあるエラー5: 循環参照エラー
原因: 数式が自分自身を参照している
❌ エラーが発生する例:
// A2セルに入力
=IF(A2>100, A2*1.1, A2*0.9)✅ 解決方法:
// 方法1: 別セルに結果を出力
// B2セルに入力
=IF(A2>100, A2*1.1, A2*0.9)
// 方法2: 補助列を使用して段階的に計算
// B2: =A2>100
// C2: =IF(B2, A2*1.1, A2*0.9)よくある問題6: IF関数のネストが7階層を超える(Excel 2003以前)
✅ 解決方法:
// 方法1: IFS関数を使用(Excel 2019/365)
=IFS(A2>=90, "S", A2>=80, "A", A2>=70, "B", A2>=60, "C", TRUE, "D")
// 方法2: VLOOKUP/XLOOKUP で代替
// 別シートに評価表を作成
// 0: D, 60: C, 70: B, 80: A, 90: S
=VLOOKUP(A2, 評価表, 2, 1)
// 方法3: 補助列で分割
// B2: =IF(A2>=70, IF(A2>=90, "S", IF(A2>=80, "A", "B")), "")
// C2: =IF(B2="", IF(A2>=60, "C", "D"), B2)よくある問題7: 論理式が正しく動作しない
原因: データ型の不一致や余分なスペース
❌ 動作しない例:
=IF(A2="100", "一致", "不一致")
// A2に数値の100が入っている場合、"不一致"になる✅ 解決方法:
// 方法1: データ型を合わせる
=IF(A2=100, "一致", "不一致") // 数値として比較
// 方法2: TEXT関数で文字列化
=IF(TEXT(A2, "0")="100", "一致", "不一致")
// 方法3: VALUE関数で数値化
=IF(VALUE(A2)=100, "一致", "不一致")
// 方法4: TRIMで余分なスペースを除去
=IF(TRIM(A2)="100", "一致", "不一致")よくある問題8: 日付の比較が正しく動作しない
❌ 動作しない例:
=IF(A2>"2025/10/15", "未来", "過去")
// A2に日付が入っていても正しく比較されない場合がある✅ 解決方法:
// 方法1: DATE関数を使用
=IF(A2>DATE(2025,10,15), "未来", "過去")
// 方法2: DATEVALUE関数を使用
=IF(A2>DATEVALUE("2025/10/15"), "未来", "過去")
// 方法3: TODAY関数との比較
=IF(A2>TODAY(), "未来", "過去")
// 方法4: シリアル値で比較
=IF(A2>44584, "未来", "過去") // 44584は2025/10/15のシリアル値よくある問題9: 大文字・小文字の区別
注意: IF関数は大文字・小文字を区別しません
// ❌ 区別されない
=IF(A2="ABC", "一致", "不一致")
// A2が "abc" でも "一致" になる
// ✅ 区別する方法: EXACT関数を使用
=IF(EXACT(A2, "ABC"), "一致", "不一致")よくある問題10: パフォーマンスの低下
症状: 大量のIF関数でファイルが重くなる
✅ 解決方法:
// 方法1: 計算方法を手動に変更
// 数式タブ → 計算方法の設定 → 手動
// 方法2: 揮発性関数を減らす
// ❌ =IF(TODAY()>A2, "期限切れ", "")
// ✅ Z1セルに =TODAY() を1回だけ記載し、参照する
// 方法3: 条件付き書式で代替
// 数式の代わりに条件付き書式を使用
// 方法4: 配列数式やテーブル機能を活用
// 個別のセルではなく、範囲全体に一度に適用
// 方法5: 不要な数式を値に変換
// 計算が完了したデータは「値の貼り付け」で固定化❓ よくある質問(Q&A)
基本的な使い方に関する質問
Q1: IF関数で3つ以上の条件を判定するには?
A: IF関数をネストするか、IFS関数(Excel 2019/365)を使用します。
// ネストIF
=IF(A2>=90, "優", IF(A2>=80, "良", IF(A2>=70, "可", "不可")))
// IFS関数
=IFS(A2>=90, "優", A2>=80, "良", A2>=70, "可", TRUE, "不可")Q2: IF関数で複数の条件を同時に満たすかチェックするには?
A: AND関数を組み合わせます。
// すべての条件を満たす場合
=IF(AND(A2>=60, B2="合格", C2>80), "合格", "不合格")
// いずれかの条件を満たす場合
=IF(OR(A2>=90, B2="特待生", C2="推薦"), "合格", "不合格")Q3: IF関数で空白セルを判定するには?
A: =””で空白をチェックします。
// 空白チェック
=IF(A2="", "未入力", "入力済み")
// 空白でないことをチェック
=IF(A2<>"", A2*1.1, "")
// より厳密なチェック(スペースのみも空白とみなす)
=IF(TRIM(A2)="", "未入力", "入力済み")Q4: IF関数の結果を数式ではなく値として表示するには?
A: IF関数自体は常に値を返しますが、計算結果を固定したい場合は「値の貼り付け」を使用します。
// 手順:
// 1. IF関数が入力されているセルを選択
// 2. Ctrl+C でコピー
// 3. 右クリック → 形式を選択して貼り付け → 値
// または Ctrl+Alt+V → V → Enter応用的な使い方に関する質問
Q5: IF関数で範囲を指定して判定するには?
A: ANDを使って範囲を指定します。
// 60以上80未満
=IF(AND(A2>=60, A2<80), "範囲内", "範囲外")
// 複数範囲の判定
=IF(AND(A2>=60, A2<80), "中",
IF(AND(A2>=80, A2<100), "高", "低")
)Q6: IF関数で別シートのデータを参照するには?
A: シート名を含めて参照します。
// 基本形
=IF(Sheet2!A2>100, "大", "小")
// スペースを含むシート名の場合
=IF('売上データ'!A2>100, "大", "小")
// 別ブックの参照
=IF([Book1.xlsx]Sheet1!A2>100, "大", "小")Q7: IF関数で部分一致を判定するには?
A: FIND、SEARCH、またはワイルドカードを使用します。
// FIND関数を使用(大文字小文字を区別)
=IF(ISNUMBER(FIND("東京", A2)), "東京あり", "東京なし")
// SEARCH関数を使用(大文字小文字を区別しない)
=IF(ISNUMBER(SEARCH("tokyo", A2)), "該当", "非該当")
// 複数キーワードのいずれかを含む
=IF(OR(ISNUMBER(FIND("東京", A2)), ISNUMBER(FIND("大阪", A2))), "該当", "非該当")Q8: IF関数で最大値・最小値を条件にするには?
A: MAX関数、MIN関数と組み合わせます。
// 最大値と比較
=IF(A2=MAX($A$2:$A$100), "最大", "")
// 上位3位以内
=IF(A2>=LARGE($A$2:$A$100, 3), "上位", "")
// 最小値と比較
=IF(A2=MIN($A$2:$A$100), "最小", "")Q9: IF関数で重複をチェックするには?
A: COUNTIF関数と組み合わせます。
// 重複チェック
=IF(COUNTIF($A$2:A2, A2)>1, "重複", "")
// 重複の個数を表示
=IF(COUNTIF($A$2:$A$100, A2)>1,
COUNTIF($A$2:$A$100, A2)&"件",
""
)
// 初出のみ「初回」、2回目以降「重複」
=IF(COUNTIF($A$2:A2, A2)=1, "初回", "重複")Q10: IF関数で曜日を判定するには?
A: WEEKDAY関数と組み合わせます。
// 土日判定
=IF(OR(WEEKDAY(A2)=1, WEEKDAY(A2)=7), "休日", "平日")
// 特定の曜日判定
=IF(WEEKDAY(A2)=2, "月曜日", "")
// 曜日名を表示
=IF(WEEKDAY(A2)=1, "日",
IF(WEEKDAY(A2)=2, "月",
IF(WEEKDAY(A2)=3, "火",
IF(WEEKDAY(A2)=4, "水",
IF(WEEKDAY(A2)=5, "木",
IF(WEEKDAY(A2)=6, "金", "土")
)
)
)
)
)エラーと問題解決に関する質問
Q11: IF関数で「FALSE」と表示されるのを防ぐには?
A: 偽の場合の値を明示的に指定します。
// ❌ FALSEが表示される
=IF(A2>100, "大")
// ✅ 空白を表示
=IF(A2>100, "大", "")
// ✅ 別の値を表示
=IF(A2>100, "大", "小")Q12: IF関数が正しく計算されない場合の対処法は?
A: 以下を確認します。
- 1. 計算方法が「自動」になっているか確認(数式タブ → 計算方法の設定)
- 2. セルの表示形式を確認(数値が文字列になっていないか)
- 3. 数式のカッコが正しく閉じられているか確認
- 4. 参照範囲が正しいか確認
- 5. F9キーで数式の一部を評価して確認
// デバッグ方法
// 数式バーで数式の一部を選択してF9キーを押すと、その部分の計算結果が表示される
// 例: =IF(A2>100, "大", "小")
// A2>100 を選択してF9 → TRUE または FALSE が表示されるQ13: IF関数で数値が文字列として扱われる場合の対処法は?
A: VALUE関数で数値に変換します。
// 文字列の数値を数値に変換
=IF(VALUE(A2)>100, "大", "小")
// または、数値として認識させる
=IF(A2*1>100, "大", "小")
// セル全体を一括変換する場合
// 1. 空白セルに「1」と入力
// 2. そのセルをコピー
// 3. 変換したい範囲を選択
// 4. 形式を選択して貼り付け → 乗算Q14: IF関数で小数点の比較がうまくいかない場合は?
A: ROUND関数で丸めてから比較します。
// 浮動小数点の誤差を回避
=IF(ROUND(A2, 2)=ROUND(B2, 2), "一致", "不一致")
// または、誤差範囲内を一致とみなす
=IF(ABS(A2-B2)<0.01, "一致", "不一致")パフォーマンスと最適化に関する質問
Q15: IF関数が多すぎてExcelが重い場合の対処法は?
A: 以下の方法で最適化します。
// 方法1: 計算済みの値を固定化
// 必要な計算が終わったら「値の貼り付け」で数式を値に変換
// 方法2: 揮発性関数を減らす
// ❌ =IF(TODAY()>A2, "期限切れ", "")
// ✅ 別セルにTODAY()を1つだけ配置し、参照する
// 方法3: 条件付き書式で代替
// 単純な判定は条件付き書式を使用
// 方法4: VLOOKUPやINDEXで代替
// 複雑なネストIFは参照テーブルを作成して検索関数を使用
// 方法5: 計算を手動に設定
// 数式タブ → 計算方法の設定 → 手動
// 必要な時だけF9で再計算Q16: IF関数を配列数式として使うには?
A: Ctrl+Shift+Enterで配列数式として入力します(Excel 2019以前)。
// 配列数式の例(Excel 2019以前)
// 複数セルに一度に数式を適用
{=IF(A2:A100>100, "大", "小")}
// 入力方法: 数式を入力後、Ctrl+Shift+Enterで確定
// Excel 365の場合
// 自動的にスピル機能で展開される
=IF(A2:A100>100, "大", "小")Q17: IF関数で他の関数を効率的に組み合わせるには?
A: 用途に応じて適切な関数を選択します。
// SUMIF: 条件付き合計
=SUMIF(A2:A100, ">100", B2:B100)
// COUNTIF: 条件付きカウント
=COUNTIF(A2:A100, ">100")
// AVERAGEIF: 条件付き平均
=AVERAGEIF(A2:A100, ">100", B2:B100)
// MAXIFS/MINIFS: 条件付き最大/最小(Excel 2019/365)
=MAXIFS(B2:B100, A2:A100, ">100")
// FILTER: 条件に合うデータを抽出(Excel 365)
=FILTER(A2:B100, A2:A100>100, "該当なし")実務的な活用に関する質問
Q18: IF関数で複数の結果を同時に返すには?
A: 文字列結合や複数セルに分けて出力します。
// 方法1: 文字列結合
=IF(A2>100, "大: "&A2&"円", "小: "&A2&"円")
// 方法2: 複数セルに分けて出力
// B2: =IF(A2>100, "大", "小")
// C2: =IF(A2>100, A2*1.1, A2*0.9)
// 方法3: 配列を返す(Excel 365)
=IF(A2>100, {A2, "大", A2*1.1}, {A2, "小", A2*0.9})Q19: IF関数でドロップダウンリストの値を判定するには?
A: 通常のIF関数で判定できます。
// ドロップダウンリストの値を判定
=IF(A2="営業部", "外勤", "内勤")
// 複数の値を判定
=IF(OR(A2="営業部", A2="企画部"), "外勤", "内勤")
// SWITCH関数での代替(Excel 2019/365)
=SWITCH(A2,
"営業部", "外勤",
"企画部", "外勤",
"総務部", "内勤",
"開発部", "内勤",
"不明"
)Q20: IF関数で条件に応じてセルの色を変えるには?
A: 条件付き書式を使用します(IF関数では色は変更できません)。
// 手順:
// 1. 対象セルを選択
// 2. ホームタブ → 条件付き書式 → 新しいルール
// 3. 「数式を使用して、書式設定するセルを決定」を選択
// 4. 数式を入力: =A2>100
// 5. 書式を設定(背景色、フォント色など)
// 複数条件の場合
// ルール1: =A2>100 → 赤色
// ルール2: =AND(A2>=50, A2<=100) → 黄色
// ルール3: =A2<50 → 緑色Q21: IF関数で動的な範囲を参照するには?
A: INDIRECT、OFFSET、INDEXなどと組み合わせます。
// INDIRECT を使用
=IF(A2="東京", SUM(INDIRECT("東京!B2:B100")), SUM(INDIRECT("大阪!B2:B100")))
// OFFSET を使用
=IF(B2>0, SUM(OFFSET(A2, 0, 0, B2, 1)), 0)
// INDEX を使用
=IF(A2="営業部", INDEX(売上表, , 2), INDEX(売上表, , 3))Q22: IF関数で月末日を判定するには?
A: EOMONTH関数と組み合わせます。
// 月末日かどうか判定
=IF(A2=EOMONTH(A2, 0), "月末", "")
// 月末3日以内かどうか判定
=IF(EOMONTH(A2, 0)-A2<=2, "月末近い", "")
// 翌月末日を取得
=IF(A2<>"", EOMONTH(A2, 1), "")Q23: IF関数で営業日を判定するには?
A: WORKDAY関数やNETWORKDAYS関数と組み合わせます。
// 営業日かどうか判定(土日祝日を除く)
=IF(NETWORKDAYS(A2, A2, 祝日リスト)=1, "営業日", "休日")
// N営業日後を計算
=IF(A2<>"", WORKDAY(A2, 5, 祝日リスト), "")
// 期限までの営業日数
=IF(B2<>"", NETWORKDAYS(TODAY(), B2, 祝日リスト), "")Q24: IF関数で時間を判定するには?
A: TIME関数と組み合わせます。
// 9:00より後かどうか
=IF(A2>TIME(9, 0, 0), "遅刻", "定時")
// 時間帯の判定
=IF(A2<TIME(12, 0, 0), "午前",
IF(A2<TIME(18, 0, 0), "午後", "夜間")
)
// 労働時間の計算(8時間超過分)
=IF(B2-A2>TIME(8, 0, 0), B2-A2-TIME(8, 0, 0), 0)
// 深夜時間帯の判定(22:00~5:00)
=IF(OR(A2>=TIME(22, 0, 0), A2<TIME(5, 0, 0)), "深夜", "通常")Q25: IF関数でパーセンテージを判定するには?
A: 小数として扱います(Excelではパーセンテージは小数で保存されています)。
// 達成率が80%以上かどうか
=IF(A2>=0.8, "達成", "未達成")
// または
=IF(A2>=80%, "達成", "未達成")
// 達成率の段階判定
=IF(A2>=1, "100%達成",
IF(A2>=0.9, "90%以上",
IF(A2>=0.8, "80%以上", "80%未満")
)
)📚 まとめと次のステップ
IF関数習得のロードマップ
レベル1: 初級(学習期間: 1-2週間)
- ✅ 基本構文の理解(論理式、真の場合、偽の場合)
- ✅ 単純な条件判定(数値比較、テキスト比較)
- ✅ 空白チェック
- ✅ 基本的な実務例(合否判定、在庫管理など)
レベル2: 中級(学習期間: 2-4週間)
- ✅ ネストされたIF関数(3-5階層)
- ✅ AND・OR・NOT関数との組み合わせ
- ✅ 複数条件の判定
- ✅ 実務での応用(請求書計算、勤務管理、顧客ランク判定など)
- ✅ エラー処理の基本(IFERROR)
レベル3: 上級(学習期間: 1-2ヶ月)
- ✅ IFS関数・SWITCH関数の活用
- ✅ 配列数式との組み合わせ
- ✅ 他の関数との高度な組み合わせ(VLOOKUP、INDEX、MATCH等)
- ✅ 複雑な業務ロジックの実装
- ✅ パフォーマンス最適化
レベル4: エキスパート(学習期間: 3-6ヶ月)
- ✅ 動的配列関数との組み合わせ(Excel 365)
- ✅ LAMBDA関数との組み合わせ
- ✅ 大規模データの効率的な処理
- ✅ 複雑なシステム構築(予算管理、人事評価、在庫管理など)
- ✅ トラブルシューティングとデバッグ技術
学習のコツ
- 実践重視: 理論だけでなく、実際に手を動かして数式を作成する
- 段階的学習: 簡単な数式から始めて、徐々に複雑にしていく
- エラーを恐れない: エラーは学習の機会。原因を理解することで成長する
- 実務に応用: 自分の業務に関連する例題で練習する
- ドキュメント化: 作成した数式の意味をメモに残す習慣をつける
- 他の関数も学ぶ: IF関数だけでなく、関連する関数も合わせて習得する
推奨される次のステップ
1. 関連関数の学習
- VLOOKUP/XLOOKUP: データ検索と参照
- SUMIFS/COUNTIFS: 複数条件での集計
- INDEX/MATCH: 高度なデータ参照
- FILTER/SORT: データの抽出と並べ替え(Excel 365)
2. 実務プロジェクトへの応用
- 売上管理システムの構築
- 在庫管理システムの構築
- 勤怠管理システムの構築
- プロジェクト管理ダッシュボードの作成
3. 自動化への発展
- マクロ(VBA): より複雑な処理の自動化
- Power Query: データの取得と変換
- Power Pivot: 大規模データの分析
- Power Automate: 業務プロセスの自動化
継続的な学習リソース
公式リソース
実践的な学習方法
- 実際の業務データで練習する
- 同僚や上司の数式を分析する
- オンラインコミュニティで質問・回答する
- 定期的に新しい機能をチェックする
最後に
IF関数は、Excelの中で最も基本的でありながら、最も強力な関数の一つです。この関数をマスターすることで、日々の業務効率が大幅に向上し、データ分析の幅が広がります。
重要なポイント:
- ✅ 基礎をしっかり固める
- ✅ 実践を通じて学ぶ
- ✅ エラーを恐れず試行錯誤する
- ✅ 可読性とメンテナンス性を意識する
- ✅ 継続的に学習し、スキルを磨く
この完全ガイドが、あなたのExcelスキル向上の一助となれば幸いです。実務での成功を心よりお祈りしています!
📖 付録: クイックリファレンス
基本構文チートシート
| 関数 | 構文 | 用途 |
|---|---|---|
| IF | =IF(条件, 真, 偽) | 基本的な条件分岐 |
| IFS | =IFS(条件1, 値1, 条件2, 値2, …) | 複数条件の判定(Excel 2019/365) |
| SWITCH | =SWITCH(式, 値1, 結果1, …) | 値に応じた結果返却(Excel 2019/365) |
| AND | =AND(条件1, 条件2, …) | すべての条件を満たす |
| OR | =OR(条件1, 条件2, …) | いずれかの条件を満たす |
| NOT | =NOT(条件) | 条件の否定 |
| IFERROR | =IFERROR(値, エラー時の値) | エラー処理 |
| IFNA | =IFNA(値, NA時の値) | #N/Aエラーの処理 |
よく使う条件式
| 条件 | 数式例 | 説明 |
|---|---|---|
| 等しい | =IF(A2=100, “一致”, “”) | 値が100と等しい |
| 等しくない | =IF(A2<>100, “不一致”, “”) | 値が100と等しくない |
| より大きい | =IF(A2>100, “超過”, “”) | 値が100より大きい |
| 以上 | =IF(A2>=100, “以上”, “”) | 値が100以上 |
| より小さい | =IF(A2<100, “未満”, “”) | 値が100より小さい |
| 以下 | =IF(A2<=100, “以下”, “”) | 値が100以下 |
| 空白 | =IF(A2=””, “空白”, “”) | セルが空白 |
| 空白でない | =IF(A2<>””, “入力済み”, “”) | セルに値がある |
| 範囲内 | =IF(AND(A2>=60, A2<80), “範囲内”, “”) | 60以上80未満 |
| 複数値のいずれか | =IF(OR(A2=”A”, A2=”B”), “該当”, “”) | AまたはB |
エラーコード一覧
| エラー | 原因 | 対処法 |
|---|---|---|
| #DIV/0! | ゼロで除算 | =IF(B2=0, “”, A2/B2) |
| #VALUE! | データ型の不一致 | =IFERROR(IF(A2>100, “大”, “小”), “エラー”) |
| #N/A | 値が見つからない | =IFNA(VLOOKUP(…), “該当なし”) |
| #REF! | 参照エラー | 参照先を修正、または名前付き範囲を使用 |
| #NAME? | 関数名の誤り | 関数名のスペルを確認 |
| #NUM! | 数値エラー | 計算範囲や引数を確認 |
| #NULL! | 範囲指定エラー | 範囲の指定方法を確認(カンマとコロン) |
| 循環参照 | 自己参照 | 別セルに結果を出力 |
ショートカットキー
| 操作 | Windows | Mac |
|---|---|---|
| 数式の編集 | F2 | Control + U |
| 数式の一部を評価 | F9 | Fn + F9 |
| 絶対参照の切り替え | F4 | Command + T |
| 再計算 | F9 | Fn + F9 |
| 数式バーの展開 | Ctrl + Shift + U | Control + Shift + U |
| 数式内で改行 | Alt + Enter | Option + Return |
| 配列数式の入力 | Ctrl + Shift + Enter | Command + Shift + Return |
| 値の貼り付け | Ctrl + Alt + V → V | Command + Option + V → V |
IF関数 完全ガイド – 初級者から上級者まで使える実践的教育資料
© 2025 | すべての実務例は実際のビジネスシーンで活用できます
IF関数は、条件に応じて異なる値を返す強力なツールです。条件式を用いることで、データの分析や意思決定を効率化することができます。特に、エラー処理機能を活用することで、データ処理の信頼性を向上させることが可能です。これにより、ユーザーは様々な状況に応じた柔軟な対応ができるようになります。



コメント