IF関数の結果がうまくいかない、偽(False)になる原因
ここでは、IF関数でうまくいかない、TureではなくFalseになる、反映されない時の原因と対処法について解説します。
よくある原因別に、対処法まで3つ紹介します。
1.数値条件は文字列が真(TRUE)になる
IF関数は、「数値条件の場合、文字列は必ず『真(TRUE)』判定」になります。
1-1.例で現象を確認
まずは、例で現象を確認してみましょう。
上の表は、テスト結果の一覧表です。
70点以上を「合格」と表示させたいため、例えばセルC5に入れた数式は、次のようにしてます。
=IF(B5>=70,"合格","不合格")
一見、数式に問題はないように見えます。
そして、№1は85点なのでセルC5の値は「合格」と、正しい結果になっています。
しかし、判定対象のセルB5に「未受験」と入った場合、IF関数は「合格」を返してきました。
論理式が「セルB5は70点以上か?」なので、本来は「真(True)」ではありません。
しかし実際には真となり、結果、IF関数がうまくいっていません。
このようにIF関数は、「数値条件の時に文字列が入ると『真』になってしまう」のです。
1-2.数値の文字列にも注意!
このことは、数値にも当てはまります。
数値も文字列であれば、条件に当てはまらなくても「真」になってしまうのです。
上の例では、セルC1に「セルA1が70以上ならば〇、そうでなければ×」というIF関数を使った数式を入れています。
セルA1の値は「68」ですが、数式の結果は「〇」になっています。
これは、セルA1が文字列になっているからです。
このように、見た目は条件を満たさないのに、文字列になっているとどんな数値も「真」になってしまうのです。
1-3.対処法を確認
文字列が入力された時に「偽」と判定させるためには、「IF関数にISNUMBER関数を組み合わせる」必要があります。
ISNUMBER関数は、「数値の場合にTRUE(真)を返す」関数です。
つまり、論理式で「数値かどうかの判定」を、ISNUMBER関数を使って行うのです。
数式の形は、次のようになります。
先ほどの例だと、セルC5に入力する数式は、
=IF(ISNUMBER(B5>=70),"合格","不合格")
です。
結果、確かに偽の判定となり「不合格」となっています。
判定対象のセルに必ず数値しか入力しない場合には必要ないのですが、文字列も入力される可能性がある場合には、このように「IF関数とISNUMBER関数の組み合わせ」を使うようにしましょう。
2.小数点以下が見た目と異なる
IF関数は、「数値の『見た目』と『実際』が異なることで、思うような判定結果にならない時」があります。
2-1.例で現象を確認
まずは、例で現象を確認してみましょう。
上の表は、教科ごとのテストの点数をもとに、E列で平均を出したものです。
そして、平均が70点以上を合格としたいため、例えばセルF5には、
=IF(E5>=70,"合格","不合格")
と入力しています。
やはり、数式には問題なさそうに見えます。
そして、№1は70点なのでセルF5の値は「合格」と、正しい結果になっています。
次に、同じ数式で英語の点数が1点下がった場合です。
論理式が「70点以上か?」に対して、セルE5は「70」となっているため、判定結果は真でなければいけません。
しかし、実際には「不合格」と表示されてしまっています。
この原因は、「実は70点未満だった」からです。
本当は「69.7点」だったのに、四捨五入で「70点」と表示されていたのです。
つまり、IF関数は正しい結果を返していたのですが、「IF関数の結果が合っていない」と見えるのです。
このようにIF関数は、「数値の『見た目』と『実際』が異なることで思うような判定結果にならない時」があるのです。
2-2.対処法を確認
対処法は2つあります。
一つ目は「小数点以下を切り捨てる」ことです。
見た目と実際を合わせるため、例の場合には「平均」のセルにROUNDDOWN関数を組み合わせています。
ROUNDDOWN関数は、「数値を指定の桁で切り捨てる」関数です。
平均値を求めているセルに、ROUNDDOWN関数を使い、数式の形は、次のようになります。
AVERAGE関数で求めた3教科の平均値を、ROUNDDOWN関数の引数「桁数」を「0」にすることで「小数点以下切捨て」にしています。
これで見た目の実際の値が一致し、結果IF関数の判定結果が合うようになります。
そして、二つ目の方法は「小数点以下(この場合は第一位)を表示させる」ことです。
この場合にも見た目の実際の値が一致し、結果IF関数の判定結果が合うようになります。
以下、小数点以下の表示のさせ方です。
(1)小数点以下を表示させたいセルを選択後、「Ctrlキー」を押しながら「1(テンキーではない方)」を押す
(2)「セルの書式設定」の「表示タブ」にある分類を「通貨」に、小数点以下の桁数を「1」に、記号を「なし」にする
※ 分類を「通貨」にすると、数値が右詰めになります
(3)OKボタンを押せば完了
これで、小数点以下が表示されます(この場合は小数点以下第一位)。
なお分類を「通貨」にするのは、数値の右側に余計なスペースを入れないためです。
この2つのいづれかの方法をとれば、見た目と実際の数値が合い、IF関数の結果が合わないと感じることはなくなります。
3.日付条件にはDATEVALUE関数が必要
IF関数は、「条件値が日付で、数式内で直接指定する場合、DATEVALUE関数を使う」必要があります。
3-1.例で現象を確認
まずは、例で現象を確認してみましょう。
上の表は、セルA2に「2019/4/1」という日付が入ったものです。
そして、セルB2で「セルA2が『2019/4/1』か?を判定し、真であれば〇を、偽であれば×を返す」数式に指定します。
この時、セルB2に入力した数式は
=IF(A2="2019/4/1","〇","×")
です。
やはり、一見数式に問題はなさそうに見えます。
しかし、結果は「×」を返してしまっています。
これは、「条件値の『2019/4/1』を日付として認識できていない」ことが原因です。
このように、IF関数は「日付をダブルクォーテーションで囲んで条件にしても正しく判定されない」のです。
3-2.対処法を確認
日付条件を正しく判定させるためには、「IF関数にDATEVALUE関数を組み合わせる」必要があります。
DATEVALUE関数は、「文字列の日付を日付データに変換する」関数です。
つまり、「"2019/4/1"」は、IF関数の条件値上では「日付」ではなく「文字列」なので、DATEVALUE関数を使って日付にする必要があるのです。
数式の形は、次のようになります。
先ほどの例だと、セルB2に入力する数式は、
=IF(A2=DATEVALUE("2019/4/1"),"〇","×")
です。
結果、真の判定となり「〇」となっています。
このように、IF関数の中で日付を条件値にする場合には、「IF関数とDATEVALUE関数の組み合わせ」を使うようにしましょう。
以上参考になれば幸いです。
【口コミ・評判のいいExcel本の紹介】
IF関数の、他の記事へのリンクはこちらです。
- IF関数その他の記事へのリンクはこちら
- ◎基本的な使い方
- ◎以上、以下等の比較演算子を使う方法
- ◎日付範囲や期間を簡単に指定する方法
- ◎日付を比較する時の数式の書き方
- ◎マイナスの場合は0、空白と指定する方法
- ◎空白セルを空白にする方法
- ◎#VALUE!等のエラーになる原因と対処法
- ◎結果がうまくいかない時の原因と対処法
- ◎パーセントを条件に指定する方法
- ◎複数条件のORをリストで指定する方法
- ◎曜日の条件指定がうまくいかない場合の対応方法
- ◎空白でもSUM関数でエラーにしない方法
- ◎値があれば、入っていたらの条件にする方法
- ◎範囲全てが条件値と一致するかを判定する方法
- ◎文字が入っていたらの条件にする方法
- ◎空白を判定する方法
- ◎別シートの値を参照する方法
- ◎複数条件を「かつ」で指定する方法
- ◎複数のうちのどれかに合えばとする方法
- ◎セルの値がいづれかの場合真とする方法
- ◎特定の文字列を含む条件を指定する方法
- ◎複数列全てが一致の条件にするテクニック
- ◎複数条件を指定して分岐させる方法
- ◎ROUND関数の正しい組み合せ方