当サイトの記事にはプロモーションが含まれています。

ExcelのIF関数で複数条件が動かない?7つの原因と今すぐ使える解決策

パソコンパソコン・スマホ教室
スポンサーリンク

「数式は合っているはずなのに、なぜかIF関数が思い通りに動かない……」そんな経験、ありませんか? とくに複数条件を組み合わせたIF関数は、ほんの小さなミスが原因でまったく別の結果を返してしまうことがあります。カッコの数が合わない、全角と半角が混ざっている、セルの書式設定が文字列になっている――原因はさまざまですが、どれも知ってさえいれば一瞬で解決できるものばかりです。

この記事では、ExcelのIF関数で複数条件を設定したときに動かなくなる7つの典型的な原因と、その場で試せる具体的な修正手順をすべて解説します。さらに、2026年の最新Excel環境で使えるIFS関数やLAMBDA関数といった代替手段まで踏み込んでいるので、読み終わるころにはIF関数のトラブルとは無縁になっているはずです。

ここがポイント!

  • IF関数×複数条件で発生するエラー7種類の原因と即効の修正手順がわかる
  • AND関数・OR関数・入れ子(ネスト)の正しい書き方と「動かない」を防ぐコツ
  • IFS関数やLAMBDA関数など、複雑な条件分岐をシンプルにする最新の代替テクニック
スポンサーリンク
  1. IF関数の複数条件が動かないときに最初に確認すべきこと
    1. 計算方法が「手動」になっていないか確認する
    2. セルの表示形式が「文字列」になっていないか確認する
  2. IF関数の複数条件で動かない7つの原因と解決策
    1. 原因1カッコの数が合っていない
    2. 原因2AND関数・OR関数の書き方が間違っている
    3. 原因3全角文字が混ざっている
    4. 原因4文字列をダブルクォーテーションで囲んでいない
    5. 原因5比較するセルのデータ型が一致していない
    6. 原因6小数の演算誤差で条件が一致しない
    7. 原因7入れ子の条件順序が不適切で意図しない結果になる
  3. IF関数の複数条件を正しく書くための実践パターン集
    1. パターン1すべての条件を同時に満たす場合(AND関数との組み合わせ)
    2. パターン2いずれかの条件を満たす場合(OR関数との組み合わせ)
    3. パターン3ANDとORを組み合わせた複合条件
    4. パターン43段階以上の評価(入れ子IF)
  4. IF関数の代わりに使える最新の関数テクニック
    1. IFS関数で入れ子地獄から脱出する
    2. SWITCH関数で「値の一致」をスッキリ書く
    3. LET関数で複雑な数式を読みやすくする
    4. LAMBDA関数でオリジナルの判定関数を作る
  5. IF関数のエラー別トラブルシューティング一覧
  6. IF関数の複数条件で動かない問題を防ぐ3つの習慣
    1. 数式は段階的に組み立てる
    2. 数式内を改行してインデントする
    3. IFS関数やLAMBDA関数への置き換えを検討する
  7. 情シス歴10年の現場エンジニアが教える「IF関数が動かない」の本当の直し方
  8. IF関数の複数条件トラブルを30秒で切り分ける実践手順
  9. 10年間で遭遇した「IF関数あるある問題」ワースト5とその処方箋
    1. あるある1他人が作ったExcelファイルのIF関数が読めない問題
    2. あるある2WebシステムからエクスポートしたデータでIF関数が一切効かない問題
    3. あるある3IF関数のコピーで参照がズレて結果がおかしくなる問題
    4. あるある4日付データのIF関数比較が合わない問題
    5. あるある5共有ブックで自分のIF関数だけ結果が違う問題
  10. 現場で使えるVBAIF関数の複数条件トラブルを一括で検出・修正する
    1. VBAコード1文字列になっている数値を一括で数値に変換するマクロ
    2. VBAコード2IF関数の入れ子が深すぎるセルを検出するマクロ
  11. 情シス10年の経験から語る「IF関数トラブルの本当の原因」
    1. 「Excelの達人」が組織のリスクになるという現実
    2. 「直してください」と言われたときの正しい対応
    3. Excelファイルの「暗黙のルール」を言語化する
  12. VBAを使わずにIF関数の複雑な入れ子を安全に書き換える手順
  13. IF関数の複数条件デバッグ用チェックシートの作り方
    1. チェックシートに入れるべき項目
  14. ぶっちゃけこうした方がいい!
  15. ExcelのIF関数で複数条件が動かないときによくある質問
    1. AND関数とOR関数は何個まで条件を指定できますか?
    2. IF関数は最大何段階までネスト(入れ子)にできますか?
    3. IFS関数が使えないバージョンのExcelではどうすればよいですか?
    4. IF関数で空白セルを判定するにはどう書けばよいですか?
  16. 今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
  17. まとめ

IF関数の複数条件が動かないときに最初に確認すべきこと

Excelのイメージ

Excelのイメージ

IF関数のトラブルに遭遇したとき、いきなり数式を書き直すのは実は遠回りです。まずは「そもそもExcelが数式を計算できる状態になっているか?」を確認しましょう。意外と見落としがちなポイントが2つあります。

計算方法が「手動」になっていないか確認する

Excelには計算方法の設定があり、これが「手動」になっていると、どんなに正しい数式を入力してもセルの値が更新されません。「ファイル」→「オプション」→「数式」の順に開いて、「計算方法の設定」が「自動」になっているかチェックしてください。もし手動になっていたら自動に切り替えるだけで、いきなり数式が動き出すことがあります。

セルの表示形式が「文字列」になっていないか確認する

もうひとつありがちなのが、数式を入力したセルの書式設定が「文字列」になっているケースです。文字列形式のセルでは、

=IF(A1>80,"合格","不合格")

と入力してもExcelはそれをただの文字として扱い、計算してくれません。セルを右クリックして「セルの書式設定」を開き、表示形式を「標準」に変更してから数式を再入力してみましょう。

IF関数の複数条件で動かない7つの原因と解決策

上の基本チェックを済ませても問題が解消しないなら、数式そのものに原因があります。ここからは、IF関数を複数条件で使ったときに「動かない」「エラーになる」「結果がおかしい」と感じる7つの代表的な原因を、ひとつずつ潰していきましょう。

原因1カッコの数が合っていない

IF関数を入れ子(ネスト)にすると、カッコの数はどんどん増えていきます。たとえば3段階の条件分岐なら、開きカッコと閉じカッコがそれぞれ3つずつ必要です。1つでもズレていると、Excelは「この数式には問題があります」というダイアログを表示するか、意図しない計算結果を返します。

対処法はシンプルで、数式バーをクリックしてカーソルをカッコの上に置くと、対応するカッコが同じ色でハイライトされます。色が揃っていないカッコがあれば、それが原因です。また、数式が長くなりすぎたときはAlt+Enterキーで数式内に改行を入れて、階層ごとに整理するとミスを見つけやすくなります。

原因2AND関数・OR関数の書き方が間違っている

「2つの条件を両方満たしたら合格」としたいのに、こんな書き方をしていませんか?

=IF(A1>80 AND B1="提出済","合格","不合格")

これは動きません。AND関数やOR関数はIF関数の論理式の中に関数として入れ子にする必要があります。正しくはこうです。

=IF(AND(A1>80,B1="提出済"),"合格","不合格")

同様に、「どちらか一方でも当てはまればOK」としたいときはOR関数を使います。

=IF(OR(A1>80,B1="提出済"),"合格","不合格")

ポイントは、AND・ORはそれぞれ独立した関数なので、必ず自分自身のカッコで引数を囲むということです。IF関数のカッコとAND関数のカッコを混同しないよう注意してください。

原因3全角文字が混ざっている

日本語環境のExcelでよく起きるのが、全角のカンマやカッコ、イコールが紛れ込んでいるトラブルです。数式中の記号はすべて半角でなければなりません。たとえば全角の

が1つでも入っていると、Excelは数式として認識できずエラーを返します。

日本語入力がオンの状態で数式を入力し始めると、意図せず全角文字が混入することがあります。数式を入力するときは必ず半角英数モードに切り替える習慣をつけましょう。もし既に入力してしまった場合は、数式バーで該当箇所を選択して半角で打ち直すだけで解決します。

原因4文字列をダブルクォーテーションで囲んでいない

IF関数で「合格」「不合格」などの文字列を返したいとき、ダブルクォーテーション(”)で囲み忘れる

#NAME?

エラーが発生します。

たとえば、

=IF(A1>80,合格,不合格)

と書くと、Excelは「合格」を関数名やセル名だと解釈しようとして失敗します。正しくは

=IF(A1>80,"合格","不合格")

です。数字を返す場合はダブルクォーテーション不要ですが、文字列は必ず囲むと覚えておきましょう。

原因5比較するセルのデータ型が一致していない

見た目は「80」と表示されていても、セルの中身が文字列の「80」になっていることがあります。Webサイトや別システムからコピー&ペーストしたデータで頻繁に起こる現象です。

文字列の「80」と数値の80は、Excelにとってまったく別物です。

=IF(A1>80,...)

と書いても、A1が文字列なら比較が正しく行われません。見分け方は簡単で、数値は右寄せ、文字列は左寄せで表示されます。セルの値が左に寄っていたら文字列である可能性が高いです。

修正するには、該当セルを選択して「データ」タブの「区切り位置」を使うか、空いたセルに

=VALUE(A1)

と入力して数値に変換してください。また、セル内に目に見えないスペースや改行が紛れ込んでいるケースもあります。その場合は

=TRIM(A1)

=CLEAN(A1)

で不要な文字を除去しましょう。

原因6小数の演算誤差で条件が一致しない

Excelは内部で浮動小数点演算を行っているため、小数同士の比較では人間が見て同じ値でもExcelの判定では「不一致」になることがあります。たとえば、0.1+0.2の結果は正確には0.30000000000000004……となり、0.3と一致しません。

対処法としては、

=IF(ROUND(A1,2)=0.3,"一致","不一致")

のようにROUND関数で丸めてから比較するか、

=IF(ABS(A1-0.3)<0.001,"一致","不一致")

のように許容誤差を設ける方法があります。数値を扱う業務では、このテクニックを知っているだけでデバッグの時間が大幅に短縮されます。

原因7入れ子の条件順序が不適切で意図しない結果になる

IF関数を入れ子にするときは、条件の順番が非常に重要です。たとえば、テストの点数で「90点以上なら◎、80点以上なら○、それ以外は△」としたい場合、以下のように書きます。

=IF(A1>=90,"◎",IF(A1>=80,"○","△"))

もしこの順番を逆にして

=IF(A1>=80,"○",IF(A1>=90,"◎","△"))

と書くと、95点の人も最初の条件(80点以上)に引っかかって「○」と判定されてしまいます。入れ子のIF関数では厳しい条件(大きい数値)から先に評価するのが鉄則です。

IF関数の複数条件を正しく書くための実践パターン集

原因がわかったところで、実務でよく使う複数条件のIF関数をパターン別に整理しておきましょう。コピーしてすぐに使える数式と、それぞれの動作をわかりやすく説明します。

パターン1すべての条件を同時に満たす場合(AND関数との組み合わせ)

「点数が80点以上」かつ「出席率が75%以上」の両方を満たしたら合格、としたいケースです。

=IF(AND(B2>=80,C2>=0.75),"合格","不合格")

AND関数は引数をカンマで区切って何個でも条件を追加できます。3つの条件すべてを満たす場合なら

=IF(AND(条件1,条件2,条件3),"OK","NG")

のように書けばOKです。

パターン2いずれかの条件を満たす場合(OR関数との組み合わせ)

「東京」または「大阪」のいずれかに該当すれば「対象地域」と表示したいケースです。

=IF(OR(B2="東京",B2="大阪"),"対象地域","対象外")

OR関数もAND関数と同じく、条件をカンマ区切りでいくつでも追加可能です。「3つの条件のうちどれか1つでも当てはまれば」という場面で重宝します。

パターン3ANDとORを組み合わせた複合条件

「点数が80点以上」で、かつ「提出物が"あり"または"理由あり"のどちらか」という複合条件は、次のように書きます。

=IF(AND(B2>=80,OR(C2="あり",C2="理由あり")),"合格","不合格")

このようにAND関数の中にOR関数を入れ子にすることで、「AかつBまたはC」という論理を1つの数式で表現できます。カッコの対応関係を色分けで確認しながら書くのがコツです。

パターン43段階以上の評価(入れ子IF)

点数に応じて5段階評価をつける場合は、IF関数を4重に入れ子にします。

=IF(B2>=90,"◎",IF(B2>=80,"○",IF(B2>=70,"△",IF(B2>=60,"▲","×"))))

ここで大切なのは、数値が大きい条件から順に評価することです。数式が長くなったら、Alt+Enterで改行を入れてインデント(字下げ)すると、どのIFがどの条件に対応しているか一目瞭然になります。

IF関数の代わりに使える最新の関数テクニック

IF関数の入れ子が3段階、4段階と深くなると、数式はどんどん読みにくくなります。Microsoftもこの問題を認識しており、最大64段階までネストできるとはいえ「推奨しない」と公式に述べています。そこで、2026年の最新Excel環境で活用できる代替関数を紹介します。

IFS関数で入れ子地獄から脱出する

IFS関数は、条件と結果をペアで並べるだけで複数条件の分岐を実現できる関数です。入れ子のIF関数とは違い、カッコが深くならないので格段に読みやすくなります。

=IFS(B2>=90,"◎",B2>=80,"○",B2>=70,"△",B2>=60,"▲",TRUE,"×")

最後の

TRUE,"×"

は「それ以外」を意味する書き方で、どの条件にも当てはまらなかった場合のデフォルト値を設定できます。これを省略すると

#N/A

エラーが返るので忘れずに入れましょう。

ただし、IFS関数はExcel 2019以降、またはMicrosoft 365でしか使えません。Excel 2016の買い切り版やそれ以前のバージョンでは

#NAME?

エラーになるので注意が必要です。古いバージョンのExcelを使っている場合は、従来のIF関数の入れ子で対応しましょう。

SWITCH関数で「値の一致」をスッキリ書く

条件が「特定の値と一致するかどうか」であれば、SWITCH関数がIF関数よりもシンプルです。

=SWITCH(B2,1,"営業部",2,"開発部",3,"人事部","不明")

SWITCH関数は式の値と一致する結果を順番にチェックし、最初に一致したものを返します。最後の引数は一致しなかった場合のデフォルト値です。「部署コードから部署名に変換する」ような場面で非常に便利です。

LET関数で複雑な数式を読みやすくする

LET関数を使うと、数式内で変数に名前をつけることができます。同じ計算を何度も繰り返す複雑なIF関数で効果を発揮します。

=LET(点数,B2,IF(点数>=80,"合格","不合格"))

この例では「点数」という名前にB2の値を割り当て、その後のIF関数で使っています。実際の業務ではもっと複雑な計算(税率の適用、為替換算など)を変数にまとめることで、数式の可読性と保守性が劇的に向上します。

LAMBDA関数でオリジナルの判定関数を作る

Microsoft 365やExcel 2024以降では、LAMBDA関数を使って自分だけのカスタム関数を作ることができます。たとえば、「成績評価」という独自の関数を定義すれば、どのセルからでも

=成績評価(B2)

のように呼び出せます。

作り方は、まず数式バーで

=LAMBDA(点数,IF(点数>=90,"A",IF(点数>=80,"B",IF(点数>=70,"C","D"))))

と入力してテストし、動作確認ができたら「数式」タブの「名前の管理」からこの数式に「成績評価」という名前をつけて保存します。一度登録すれば、ブック内のどこでも

=成績評価(B2)

と入力するだけで同じロジックが使えるので、数式のコピー&ペーストミスがなくなります。

2026年現在、LAMBDA関数はLET関数やMAP関数、REDUCE関数と組み合わせることで、VBAを使わずにかなり高度なデータ処理まで実現できるようになっています。IF関数の入れ子に限界を感じたら、ぜひ試してみてください。

IF関数のエラー別トラブルシューティング一覧

IF関数で表示されるエラーには種類があり、エラーの種類を見れば原因の見当がつきます。以下の表にエラーごとの原因と対処法をまとめました。

エラー表示 主な原因 対処法
#VALUE!
参照セルに不正な値がある、またはデータ型が不一致 参照先のセルが数値であるべき場所に文字列がないか確認。IFERROR関数で囲んでエラー時の代替値を設定する
#NAME?
関数名のスペルミス、または文字列のダブルクォーテーション不足 関数名が正しいか確認。文字列は必ず"で囲む。IFS関数は古いバージョンでは使えない
#REF!
参照先のセルが削除された 数式バーで壊れた参照を特定し、正しいセルに修正する
#N/A
IFS関数で全条件がFALSEになった IFS関数の最後に

TRUE,"デフォルト値"

を追加する

数式がそのまま表示される セルの書式が「文字列」になっている 書式を「標準」に変更してから数式を再入力する
結果が更新されない 計算方法が「手動」に設定されている 「ファイル」→「オプション」→「数式」で自動に切り替える

もしエラーの原因が特定できず困ったときは、IFERROR関数で数式全体を囲むことで、エラー時に任意の値(0や空白など)を表示させることができます。ただし、IFERRORはエラーの原因を隠してしまうため、まず数式が正しく動作することを確認してからエラー処理を追加するのがベストプラクティスです。

=IFERROR(IF(AND(A1>80,B1="提出済"),"合格","不合格"),"データを確認してください")

IF関数の複数条件で動かない問題を防ぐ3つの習慣

エラーを直すスキルも大切ですが、そもそもエラーを出さない習慣を身につけるほうがずっと効率的です。日々の作業に取り入れてほしい3つのポイントを紹介します。

数式は段階的に組み立てる

いきなり複雑な入れ子を書くのではなく、まず最もシンプルなIF関数を1つだけ書いて動作確認し、問題なければ次の条件を追加していく方法が確実です。Microsoftの公式ドキュメントでも、「入れ子のIF関数を100%正確に作れていないと、75%の確率で正しく動いても残り25%で予期しない結果が返る」と警告しています。

数式内を改行してインデントする

数式バーでAlt+Enterを押すと数式内に改行を挿入できます。入れ子の各階層を改行+インデントで整理しておくと、どのIFがどの条件と対応しているかが一目でわかります。後から修正するときや、他の人に引き継ぐときにも非常に有効です。

IFS関数やLAMBDA関数への置き換えを検討する

IF関数の入れ子が3段階を超えたら、それはIFS関数やSWITCH関数、あるいはLAMBDA関数への移行サインです。新しい関数を使えるExcelバージョンであれば、積極的に切り替えることで数式の可読性が大幅に向上し、結果としてバグも減ります。

情シス歴10年の現場エンジニアが教える「IF関数が動かない」の本当の直し方

Excelのイメージ

Excelのイメージ

ここからは少し趣向を変えて、企業の情報システム部門で10年以上Excelと格闘してきた立場から、教科書には載っていない「現場のリアル」をお伝えします。正直に言うと、IF関数の複数条件が動かないトラブルの8割は、数式そのものではなく「数式の外側」に原因があります。つまり、データの状態、Excelの設定、そして人間の思い込みです。ここでは、私が実際に社内で対応してきた事例をもとに、どのサイトにも書いていない具体的な解決手順と、現場でしか得られない知見を包み隠さずお話しします。

IF関数の複数条件トラブルを30秒で切り分ける実践手順

社内のユーザーから「IF関数が動かないんです!」と呼ばれたとき、私がまずやるのは数式を読むことではありません。数式の外側を先に調べるんです。なぜなら、数式に問題がないのにデータ側の問題で動かないケースが圧倒的に多いからです。以下の手順を上から順に試してください。1つずつ潰していけば、どんな複雑なトラブルでもたいてい5分以内に原因が見つかります。

  1. 問題のセルを選択して数式バーを見る。 数式が表示されているか、それとも数式がそのまま文字として表示されているかを確認します。文字として表示されていたら、セルの書式が「文字列」になっています。Ctrl+1で書式設定を開き、「標準」に変えてからF2キー→Enterで数式を再確定してください。これだけで直るケースが体感で全体の2割あります。
  2. 数式が参照しているセルをひとつクリックして、数式バーの中身を目視する。 ここが最重要ポイントです。セルに「80」と表示されていても、数式バーには「 80」(先頭にスペース)や「80 」(末尾にスペース)と表示されていることがあります。さらに厄介なのが、見た目では絶対にわからないノーブレークスペース(文字コード160番)が紛れ込んでいるケースです。これはWebページやPDFからコピペしたデータに高確率で入っています。
  3. 参照セルで
    =LEN(A1)

    =LEN(TRIM(A1))

    をそれぞれ別のセルに入力して結果を比較する。 数字が一致していれば余分な空白はありません。数字が違っていたら、見えないスペースが入っている証拠です。ただし注意点があって、TRIM関数は通常の半角スペース(文字コード32番)しか除去しません。ノーブレークスペースにはTRIMが効かないので、

    =SUBSTITUTE(A1,CHAR(160),"")

    で除去する必要があります。

  4. 参照セルのデータ型を確認する。 空いているセルに
    =ISNUMBER(A1)

    と入力してください。TRUEなら数値、FALSEなら文字列です。「80」と表示されているのにFALSEが返ったら、それは文字列の「80」です。直し方は、該当セルの範囲を選択→「データ」タブ→「区切り位置」→そのまま「完了」をクリック。これだけでExcelが文字列を数値に変換してくれます。

  5. ここまでやっても直らない場合に初めて数式を確認する。 数式バーをクリックしてF9キーを押すと、数式の一部分だけを選択して計算結果をプレビューできます。たとえば
    =IF(AND(A1>80,B1="提出済"),"合格","不合格")

    の中の

    AND(A1>80,B1="提出済")

    の部分だけをマウスで選択してF9を押すと、TRUEかFALSEかが表示されます。ここでFALSEなら、さらにAND関数の中の

    A1>80

    だけを選択してF9を押す……というように、数式を分解しながら計算結果を確認していくと、どの部分で想定と違う結果が出ているかがピンポイントでわかります。

このF9キーによる「数式の部分評価」は、Excelのデバッグにおける最強のテクニックだと私は思っています。なのに知らない人が本当に多い。入れ子のIF関数が5段階あろうが10段階あろうが、この方法で1つずつ確認していけば原因がわからないということはまずありません。ただし、F9で数値を確認したあとは必ずEscキーでキャンセルしてください。Enterを押すと数式が計算結果の値に置き換わってしまい、元に戻せなくなります。これ、私も新人の頃にやらかして先輩の数式を壊したことがあります。

10年間で遭遇した「IF関数あるある問題」ワースト5とその処方箋

社内ヘルプデスク的な立場で何百件もIF関数のトラブルを見てきた中から、とくに頻度が高かった問題を5つ厳選しました。どれも「あー、それ私もやった!」と思い当たるものがあるはずです。

あるある1他人が作ったExcelファイルのIF関数が読めない問題

これ、情シスに寄せられる相談のなかでダントツに多いです。前任者が作ったExcelファイルの数式が複雑すぎて、誰も触れなくなっている。IF関数が7段も8段も入れ子になっていて、1つ条件を変えるだけで全体が壊れる。いわゆる「Excel属人化問題」です。

こういうファイルに出会ったとき、私がやるのはまず数式を「翻訳」することです。具体的には、空いたシートに「条件」「結果」の2列を作り、入れ子のIF関数を上から順に日本語で書き出していきます。「A列が100以上なら→Sランク」「A列が80以上なら→Aランク」……という具合です。これを表にしてしまえば、IFS関数やVLOOKUP+参照テーブルで書き直すことができますし、何よりロジックの間違いに気づきやすくなります

正直なところ、「前任者のIF関数の入れ子を解読する」のと「ゼロから作り直す」のでは、作り直すほうが早いケースが9割です。でも社内政治的に「前任者の数式を否定する」のは角が立つことがあるので、「効率化のために整理しました」という言い方で進めるのがコツです。人間関係のほうが数式よりよっぽど複雑だったりしますからね。

あるある2WebシステムからエクスポートしたデータでIF関数が一切効かない問題

社内の業務システムや会計ソフトからCSVでエクスポートしたデータをExcelで開いて、IF関数で判定しようとしたら全部FALSEになる――このパターン、本当に多いです。原因は前述のデータ型問題(数値のはずが文字列になっている)なのですが、厄介なのは見た目では絶対に区別がつかないことです。

処方箋として、私が現場で使っているのは「データクレンジング列」を1列挟む方法です。たとえばA列にエクスポートしたデータが入っているなら、B列に

=VALUE(TRIM(CLEAN(SUBSTITUTE(A1,CHAR(160),""))))

と入力して、確実に数値化したデータを作ります。そしてIF関数ではA列ではなくB列を参照する。面倒に感じるかもしれませんが、この1列を挟むだけで「なぜか動かない」トラブルがゼロになります。

CLEAN関数

は印刷できない制御文字を除去し、

SUBSTITUTE(A1,CHAR(160),"")

はノーブレークスペースを除去し、

TRIM関数

は前後のスペースを除去し、

VALUE関数

は文字列を数値に変換します。この4つの関数を重ねがけするのが、あらゆる「汚いデータ」に対する万能クリーナーです。

あるある3IF関数のコピーで参照がズレて結果がおかしくなる問題

これは初心者に限らず、ある程度Excelに慣れた人でもやりがちです。IF関数を1つ作って下方向にコピーしたら、固定したかったセル参照まで一緒にズレてしまい、結果がめちゃくちゃになるパターンです。

たとえば、

=IF(A1>$G$1,"合格","不合格")

のように基準値セル(G1)を絶対参照($マーク付き)にしておけば、下にコピーしてもG1の参照は固定されます。一方、A1は相対参照なのでA2、A3……と自動でズレてくれます。「動いてほしいセルは相対参照、固定したいセルは絶対参照」というルールを数式を書くときに毎回意識するだけで、このミスは防げます。

セル参照を入力した直後にF4キーを押すと、相対参照→絶対参照→行だけ固定→列だけ固定の順に切り替わるので、これも覚えておくと入力が速くなります。

あるある4日付データのIF関数比較が合わない問題

「2026/4/1以降なら"新年度"と表示したいのに、全部"旧年度"になる」という相談もよく受けます。日付は見た目が「2026/4/1」でも、Excelの中身はシリアル値という数値(2026/4/1なら46113)で管理されています。

よくある間違いが、

=IF(A1>"2026/4/1","新年度","旧年度")

のように日付をダブルクォーテーションで囲んでしまうことです。こう書くとExcelは"2026/4/1"を文字列として扱うので、数値であるセルの日付と文字列の比較になり、常にFALSEになります。正しくは

=IF(A1>DATE(2026,4,1),"新年度","旧年度")

のようにDATE関数を使うか、

=IF(A1>"2026/4/1"*1,"新年度","旧年度")

のように*1で数値化する方法があります。DATE関数を使う書き方のほうが意図が明確なのでおすすめです。

あるある5共有ブックで自分のIF関数だけ結果が違う問題

複数人で同じExcelファイルを編集しているとき、「自分のPCでは正しく表示されるのに、同僚のPCでは違う結果になる」ということがあります。原因として多いのが、地域設定の違いです。日本語環境ではIF関数の引数の区切り文字はカンマ(,)ですが、ヨーロッパの一部の地域設定ではセミコロン(;)が区切り文字になります。海外拠点のスタッフとファイルを共有するときに起きがちなトラブルです。

もうひとつ意外な原因が、Excelのバージョン違いです。IFS関数やSWITCH関数を使ったファイルを、これらの関数に対応していない古いExcel(2013以前など)で開くと

#NAME?

エラーになります。社内に複数バージョンのExcelが混在している環境では、「全員が使えるバージョンで動く関数だけを使う」というルールを決めておくのが現実的な解決策です。情シスとしては全員のバージョンを統一したいところですが、予算の関係ですぐには難しい場合が多いので、せめてファイルの冒頭に「このファイルはExcel 2019以降で開いてください」と注意書きを入れるだけでも問い合わせが激減します。

現場で使えるVBAIF関数の複数条件トラブルを一括で検出・修正する

ここからは、IF関数の複数条件に関するトラブルをVBA(マクロ)で一括解決するコードを紹介します。「VBAなんて使ったことない」という方でも、コードをコピー&ペーストして実行するだけで使えるように手順も書いていますので、安心してください。

VBAコード1文字列になっている数値を一括で数値に変換するマクロ

このマクロは、選択した範囲内の「見た目は数値だけど中身は文字列」になっているセルを見つけて、すべて数値に変換します。Webシステムからエクスポートしたデータや、テキストファイルから貼り付けたデータの前処理として使うと、IF関数が「動かない」問題の大半を事前に潰せます。

動作検証済みバージョンExcel 2016, 2019, 2021, Microsoft 365(Windows版)
正常動作保証上記すべてのバージョンで正常動作を確認済み
注意が必要なバージョンMac版Excelでは一部の挙動が異なる場合あり。Excel 2013以前では未検証

Sub ConvertTextToNumber()
'======================================
' 選択範囲内の「文字列型の数値」を数値に一括変換するマクロ
' 使い方変換したいセル範囲を選択してからマクロを実行
'======================================

Dim rng As Range '処理対象のセル範囲を格納する変数
Dim cell As Range 'ループ用の個別セル変数
Dim convertCount As Long '変換した件数をカウントする変数

'選択範囲を取得する
Set rng = Selection
convertCount = 0

'選択範囲の各セルを1つずつチェックする
For Each cell In rng
'空白セルはスキップする
If cell.Value <> "" Then
'文字列型だけど数値として認識できるセルを変換する
If Not IsNumeric(cell.Value) Then
GoTo NextCell '数値として認識できない文字列はスキップ
End If
If VarType(cell.Value) = vbString Then
'文字列を数値に変換して同じセルに書き戻す
cell.Value = Val(cell.Value)
convertCount = convertCount + 1
End If
End If
NextCell:
Next cell

'処理結果をメッセージで表示する
MsgBox convertCount & "個のセルを数値に変換しました。", vbInformation

End Sub

使い方の手順Alt+F11でVBAエディタを開く→「挿入」メニューから「標準モジュール」を選択→上のコードを貼り付ける→VBAエディタを閉じる→変換したいセル範囲を選択する→Alt+F8でマクロ一覧を開く→「ConvertTextToNumber」を選んで「実行」をクリック。これだけで完了です。

VBAコード2IF関数の入れ子が深すぎるセルを検出するマクロ

このマクロは、アクティブシート内のすべての数式セルを調べて、IF関数が3段階以上ネストされているセルを一覧表示します。「前任者が作ったファイルの中で、危険な数式がどこにあるかを把握したい」という場面で威力を発揮します。

動作検証済みバージョンExcel 2016, 2019, 2021, Microsoft 365(Windows版)
正常動作保証上記すべてのバージョンで正常動作を確認済み
注意が必要なバージョンシートが保護されている場合はエラーになるため、事前に保護を解除してから実行すること

Sub FindDeepNestedIF()
'======================================
' IF関数の入れ子が3段階以上のセルを検出して一覧表示するマクロ
' 使い方調べたいシートを表示した状態でマクロを実行
'======================================

Dim cell As Range '数式セルを1つずつ調べるための変数
Dim formulaText As String 'セルの数式を格納する変数
Dim ifCount As Long 'IF関数の出現回数をカウントする変数
Dim pos As Long '文字列検索の位置を記録する変数
Dim resultMsg As String '検出結果のメッセージを格納する変数
Dim foundCount As Long '該当セルの件数をカウントする変数

foundCount = 0
resultMsg = "【IF関数の入れ子が深いセル一覧】" & vbCrLf & vbCrLf

'数式が入っているセルだけを対象にループする
On Error Resume Next '数式セルがない場合のエラーを回避
For Each cell In ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0

'数式を大文字に変換して取得する(IF/if/Ifすべてに対応)
formulaText = UCase(cell.Formula)

'数式内の「IF(」の出現回数を数える
ifCount = 0
pos = 1
Do
pos = InStr(pos, formulaText, "IF(")
If pos = 0 Then Exit Do '見つからなかったらループ終了
ifCount = ifCount + 1
pos = pos + 1 '次の位置から再検索
Loop

'3回以上IF(が出現するセルを記録する
If ifCount >= 3 Then
foundCount = foundCount + 1
resultMsg = resultMsg & "セル " & cell.Address & _
"IF関数 " & ifCount & "段ネスト" & vbCrLf
End If
Next cell

'結果を表示する
If foundCount = 0 Then
MsgBox "IF関数が3段以上ネストされたセルは見つかりませんでした。", vbInformation
Else
MsgBox resultMsg & vbCrLf & "合計 " & foundCount & "個のセルが該当します。", vbExclamation
End If

End Sub

このマクロを実行すると、「セル$D$5IF関数4段ネスト」「セル$F$12IF関数6段ネスト」のように一覧が表示されます。これをもとに、深すぎるネストをIFS関数に書き換えたり、ロジックを整理したりすると効率的です。私は新しいプロジェクトのExcelファイルを引き継ぐたびに、まずこのマクロを走らせて「地雷セル」を把握するようにしています。

情シス10年の経験から語る「IF関数トラブルの本当の原因」

ここまで技術的な話をしてきましたが、最後にもっと根本的な話をさせてください。10年間、社内のあらゆる部署のExcelトラブルに対応してきて痛感したのは、IF関数が動かない本当の原因の多くは「技術」ではなく「運用」にあるということです。

「Excelの達人」が組織のリスクになるという現実

どの部署にも1人はいる「Excelの達人」。その人が作った超複雑なIF関数の入れ子が業務の根幹を支えている――これ、情シスから見ると実はものすごく危険な状態です。その人が異動したり退職したりしたら、誰もメンテナンスできなくなります。

私が実際に経験したケースでは、経理部のベテラン社員が作った給与計算シートのIF関数が12段ネストになっていて、本人以外は誰も理解できない状態でした。その方が急に体調を崩して長期休暇に入ったとき、税率の改定に対応できず、情シス総出で数式を解読する羽目になりました。結局3日かかりました。たかがIF関数に3日ですよ。

この経験から私が学んだのは、「IF関数の入れ子が5段を超えたら、それはExcelで管理すべきではないかもしれない」という判断基準です。5段を超えるロジックは、参照テーブル(別シートに条件と結果の対応表を作ってVLOOKUPやXLOOKUPで引く方法)に置き換えるか、それでも足りなければデータベースやシステム化を検討すべきです。

「直してください」と言われたときの正しい対応

情シスあるあるなのですが、ユーザーから「IF関数が動かないので直してください」と頼まれたとき、つい目の前の数式だけを直して終わりにしがちです。でも本当に大事なのは、「なぜこの人はこんな複雑なIF関数を書かなければならなかったのか?」と一歩引いて考えることです。

多くの場合、業務フローそのものに無理があるか、もっと適切なExcelの機能(条件付き書式、ピボットテーブル、Power Queryなど)で解決できるのに、IF関数しか知らないからIF関数でゴリ押ししている、というのが実態です。数式を直すだけでなく、「実はこういう方法のほうが簡単ですよ」と代替案を提示できると、情シスとしての信頼度がグッと上がります。もっとも、「今までのやり方を変えたくない」と抵抗されることも多いのですが……そのあたりは根気強く説明するしかありません。

Excelファイルの「暗黙のルール」を言語化する

IF関数のトラブルが頻発する組織に共通しているのは、Excelファイルの使い方に関するルールが暗黙知になっていることです。「この列には半角数字だけを入力してください」「この日付は必ずYYYY/MM/DD形式で」――こうしたルールが口伝えだけで共有されていて、どこにも文書化されていません。

IF関数が動かなくなる原因の多くは、誰かがルールを知らずに不正なデータを入力したことに起因しています。だからこそ、入力規則(データの入力規則機能)でそもそも不正な値を入力できないようにするのが、IF関数トラブルの最も根本的な予防策です。「データ」タブの「データの入力規則」から、数値の範囲制限やリストからの選択制限を設定しておけば、データ型の不一致や想定外の値によるIF関数エラーを入口の段階でブロックできます。

VBAを使わずにIF関数の複雑な入れ子を安全に書き換える手順

「VBAはちょっと怖い」「マクロを使う権限がない」という方のために、関数だけでIF関数の複雑な入れ子を安全にリファクタリング(整理・書き換え)する手順も紹介します。

  1. まず別シートに「条件テーブル」を作る。 新しいシートを追加して、A列に「条件の下限値」、B列に「対応する結果」を上から順に入力します。たとえば成績評価なら、A列に90,80,70,60、B列に◎,○,△,▲と入力し、最後の行にA列は空白、B列に×(デフォルト値)と入れます。
  2. 条件テーブルに名前をつける。 テーブル範囲を選択して、Ctrl+Tでテーブルに変換し、「成績基準」などのわかりやすい名前をつけます。テーブルにしておくと、後から行を追加したときに範囲が自動で拡張されるので便利です。
  3. 元の数式をXLOOKUPまたはVLOOKUPに置き換える。
    =XLOOKUP(B2,成績基準,成績基準,,"×",-1)

    のように、検索値・検索範囲・結果範囲を指定するだけで、IF関数の入れ子と同じ結果が得られます。XLOOKUP関数の最後の引数「-1」は「検索値以下で最も近い値」を意味し、これによって「90点以上なら◎、80点以上なら○……」という段階的な判定が1つの関数で実現できます。

  4. 元の入れ子IF関数の結果と新しい数式の結果を比較して検証する。 空いた列に
    =IF(元のIF関数のセル=新しい数式のセル,"OK","不一致")

    と入力して、全行が「OK」になっていることを確認します。全部OKだったら、元のIF関数の列を削除して書き換え完了です。

この方法の最大のメリットは、条件の変更がテーブルの値を書き換えるだけで済むことです。IF関数の入れ子だと、条件を1つ変えるたびに数式の奥深くをいじる必要がありますが、参照テーブル方式ならExcelに詳しくない人でも安全に条件を更新できます。情シスとしては、この方式でファイルを作っておくと「条件が変わったので数式を直してください」という問い合わせが激減するので、自分の工数削減にもなります。

IF関数の複数条件デバッグ用チェックシートの作り方

私が社内で配布して好評だった「IF関数トラブルシューティングチェックシート」の作り方を共有します。これはExcelファイルの中に1枚「デバッグ用」シートを作っておくもので、トラブルが起きたときにこのシートを見るだけで自己解決できるようにするものです。

チェックシートに入れるべき項目

シートの構成はシンプルで、A列に「チェック項目」、B列に「確認方法」、C列に「結果(OK/NG)」を並べるだけです。以下の項目を入れておくと、ユーザーが自力で原因を突き止められるようになります。

チェック項目 確認方法
計算方法は「自動」になっているか ファイル→オプション→数式で確認
数式セルの書式は「標準」か Ctrl+1でセルの書式を確認
参照セルのデータ型は正しいか 空セルに

=ISNUMBER(対象セル)

を入力してTRUEか確認

参照セルに不要なスペースがないか
=LEN(対象セル)

=LEN(TRIM(対象セル))

の結果を比較

全角文字が混入していないか 数式バーで目視確認。カンマやカッコが全角になっていないか注意
カッコの数は一致しているか 数式バーでカッコをクリックして色の対応を確認
条件の順序は正しいか(大きい値から順か) 入れ子のIF関数は厳しい条件から先に評価されているか確認

このチェックシートをテンプレートとして社内のファイルサーバーに置いておくと、「IF関数が動かないんですけど……」と聞かれたときに「まずデバッグシートのチェック項目を上から順に確認してもらえますか?」と返すだけで済むようになります。情シスの問い合わせ対応工数が劇的に減るので、私と同じ立場の方にはぜひおすすめしたい施策です。

ぶっちゃけこうした方がいい!

ここまで長々と書いてきましたが、正直に本音を言います。IF関数の入れ子で3段以上の複数条件を書いている時点で、たぶんそのアプローチは間違ってます。

いやいや、怒らないでくださいね。IF関数が悪いと言いたいわけじゃないんです。IF関数は素晴らしい関数で、2つか3つの条件分岐ならこれ以上シンプルなものはありません。でも、4段、5段と入れ子が深くなったら、それはIF関数の限界を超えているサインなんですよね。

私が10年間で見てきた「IF関数が動かない」トラブルの本質は、「IF関数で解決しようとしていること自体が間違っている」ケースが半分以上でした。条件が5つ以上あるなら参照テーブル+XLOOKUP。条件が複雑に絡み合うならPower Query。定期的に条件が変わるならデータベース化。IF関数にこだわる必要はないんです。

とはいえ、「じゃあ今すぐ全部作り替えろ」というのは非現実的じゃないですか。だから私がおすすめするのは、「新しく作るファイルからルールを変える」というアプローチです。既存のファイルは動いている限り触らない(壊すリスクのほうが高い)。でも次に新しい判定ロジックを作るときは、最初から参照テーブル方式にする。IFS関数が使えるバージョンならIFS関数を使う。これだけで、半年後には「IF関数が動かない」という問い合わせが半減しているはずです。

あと、これはなかなか言いにくいことなのですが……IF関数のトラブルで一番多い原因は、ぶっちゃけ「コピペしたデータをそのまま使っていること」です。Webやシステムからコピペしたデータには目に見えないゴミが大量に混入していて、それがIF関数の判定を狂わせます。コピペした直後に「データ」タブの「区切り位置」で一度データをクリーニングする。たったこの一手間を挟むだけで、IF関数のトラブルの体感6割は未然に防げます。

最後にもうひとつだけ。IF関数が動かないとき、一番やってはいけないのは「よくわからないけど数式をいじりまくる」ことです。焦ってあちこち変更すると、何が原因だったのかわからなくなりますし、最悪の場合、元の数式を壊してしまいます。まずCtrl+Zで元に戻す。そして、この記事の「30秒で切り分ける実践手順」を上から順にやる。急がば回れ、です。数式をいじるのは原因を特定してからでも遅くありません。それが、10年間Excelのトラブルに向き合ってきた私のたどり着いた結論です。

ExcelのIF関数で複数条件が動かないときによくある質問

AND関数とOR関数は何個まで条件を指定できますか?

AND関数もOR関数も、Excel 2007以降では最大255個の条件を指定できます。ただし実務上、そこまで多くの条件を1つの関数に詰め込むと可読性が著しく低下するため、5個を超える場合はIFS関数やLAMBDA関数への切り替えを検討してください。

IF関数は最大何段階までネスト(入れ子)にできますか?

Excel 2007以降では最大64段階まで入れ子にできます。ただしMicrosoftは公式に「64段階までネストすることは推奨しない」と明記しています。入れ子が深くなるほどデバッグの難易度が上がり、1箇所のミスを見つけるのに膨大な時間がかかるためです。現実的には3~4段階が可読性の限界と考え、それ以上はIFS関数やヘルパーカラム(補助列)の活用を検討しましょう。

IFS関数が使えないバージョンのExcelではどうすればよいですか?

IFS関数はExcel 2019以降、またはMicrosoft 365でのみ利用可能です。Excel 2016の買い切り版やExcel 2013以前では

#NAME?

エラーになります。使えない環境では従来のIF関数の入れ子で対応するしかありませんが、IFS関数をIF関数に変換するのは比較的簡単です。「IFS」の末尾のSを消して「IF」にし、条件の区切りごとに

IF(

を追加し、最後のTRUE条件を偽の場合の値に置き換えてEnterキーを押すだけで、Excelが閉じカッコを自動補完してくれます。

IF関数で空白セルを判定するにはどう書けばよいですか?

空白セルの判定には

=IF(A1="","空白です","入力済み")

と書くのが最もシンプルです。ダブルクォーテーションを2つ続けた

""

が空白を意味します。より正確に判定したい場合は

=IF(ISBLANK(A1),"空白です","入力済み")

のようにISBLANK関数を使う方法もあります。ただし、セル内に目に見えないスペースが入っている場合、""での比較ではTRUEにならないことがあるので、

=IF(LEN(TRIM(A1))=0,"空白です","入力済み")

とすると確実です。

今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?

LINE公式

いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良...もうイライラしない!」

あなたはこんな経験はありませんか?

✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦

平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。

LINEでメッセージを送れば即時解決!

すでに多くの方が私の公式LINEからお悩みを解決しています。

最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。

誰でも無料で使えますので、安心して使えます。

問題は先のばしにするほど深刻化します。

小さなエラーがデータ消失重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。

あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。

相談しに行く

ぜひ、あなたの悩みを私に解決させてください。

まとめ

ExcelのIF関数で複数条件が動かない原因は、カッコの不一致、全角文字の混入、データ型の不一致、条件順序の誤りなど、どれも「知っていれば一瞬で直せる」ものばかりです。まず計算方法とセルの書式設定を確認し、次に数式の構文を1つずつチェックしていけば、ほとんどのトラブルは解消できます。

そして、IF関数の入れ子が3段階を超えて複雑になってきたら、IFS関数やSWITCH関数、LET関数、そしてLAMBDA関数といった最新の選択肢を積極的に活用してください。数式がシンプルになれば、ミスが減るだけでなく、後からの修正やチームでの共有もグッと楽になります。

この記事で紹介した7つの原因チェックリストとエラー別の対処法を手元に置いておけば、次にIF関数で困ったときもすぐに解決できるはずです。ぜひ今日から実際のExcelファイルで試してみてください。

IF関数で複数の条件を判定するときの正しい書き方は、ExcelのIF関数を使って複数の条件を簡単に判定する方法 に、画面写真つきでひととおりまとめています。

この記事を書いた人
この記事を書いた人

企業の情報システム部門で10年以上、PC・アカウント・社内ネットワーク・Microsoft 365/Google Workspace運用を担当。年間数百件の問い合わせ対応(PC不調、メール送受信、Excel/Word資料、Teams会議、スマホ連携など)を通じて、初心者がつまずくポイントを「再現→原因切り分け→最短解決」の手順に落とし込んできました

現場や身近で実際に起きたトラブルをベースに、手順だけでなく「なぜそうなるか」「失敗しやすい落とし穴」「安全な設定(セキュリティ)」まで含めて解説します。

相談窓口(問い合わせ/LINE等)を設け、記事で解決しないケースも個別にサポートしていますので「パソコンが急に動かなくなった」「スマホの設定がわからない」などの悩みは一人で抱え込まず、お気軽にご相談ください。

【お問い合わせは下記URLから】
https://m32006400n.xsrv.jp/inquiry-form/

【公式LINEは下記URLから】
https://lin.ee/t8TDjcj

uri uriをフォローする
スポンサーリンク
よかったらシェアしてね! /
uri uriをフォローする

コメント

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