Help us understand the problem. What is going on with this article?

【Excel】IF文の条件判定について詳解

More than 1 year has passed since last update.

結構な人がよく分からない思い込みの元「何となく」使ってしまっているIF関数について詳解。

IF関数の基本の動作

ExcelのIF文は第1引数の論理式の解がTRUE(=真)となれば、第2引数の文を実行、
FALSE(=偽)となれば第3引数の文を実行。第3引数がなければ論理値FALSEが出力される関数。

=IF([[第1引数]], [[第2引数]], [[第3引数]])

image.png
また、TRUEFALSEの2つをまとめて「真偽値」と呼ぶ。

セルに直接「TRUE」や「FALSE」と打ち込んだ場合、あるいは「=A1<B1」「=A1=B1」のような数式をセルに入力した場合、その結果が真偽値になり、ただの文字列とは異なる性質を持つ。
image.png
image.png

IF関数の実行例

第1引数に真偽値が直接入っている場合

まずこんな使い方はしないものの、IF関数の動作を最もシンプルに理解するための一番単純な例として説明。

第1引数がTRUEのとき、第2引数の文が実行される。
image.png

第1引数がFALSEであり、かつ第3引数があるとき、第3引数の文が実行される。
image.png

第1引数がFALSEであり、第3引数が存在しないとき、FALSEが出力される。
image.png

第1引数の論理式の解が真偽値となる場合

実際に使う数式に少し近づけた例として説明。

前提として、

  • 「1は5未満である」という命題は正しいので「真(TRUE)」である。
  • 「5は1未満である」という命題は誤っているので「偽(FALSE)」である。

以下のIF文では、第1引数に入力されている数式1<5という論理式の解がTRUEであるため、第2引数の文が実行されている。
image.png

数式1<5という論理式の解がTRUEであることは以下の数式で確かめることができる。
image.png

第1引数に入力されている数式5<1という論理式の解はFALSEであるため、第3引数の文が実行される。
image.png

第1引数の計算に使う値を他のセルから参照しても勿論同じように動作する。
image.png

また、第2引数、第3引数に数式を入れた場合、その結果が出力される。
image.png
LEN関数は対象の文字列の文字数を出力する関数。セルA2には29文字の文字列が入力されているので、LEN(A2)の計算結果は29。そこから10を引いて19が出力されている。

IF文の第1引数の論理式の解が真偽値とならない場合

IF文の第1引数の計算結果がTRUEかFALSEと解釈できない場合、IF関数の計算結果はエラーとなる。
image.png

しかし、、第1引数の計算結果が実際には真偽値でなくても、真偽値と解釈できる場合、その解釈に従ってIF関数が動作する。

数値1はTRUEと解釈される。
image.png

数値0はFALSEと解釈される。
image.png

ちなみに、TRUEと解釈できる値のことをTruthy。FALSEと解釈できる値のことをFalsyと呼ぶ。

ExcelのIF文でTRUEとみなされる値とFALSEとみなされる値について、
公式にもちゃんと書かれていなかったので自分で検証してみた。

ExcelにおけるTruthy、Falsyの検証結果

  • 数値は0以外がTRUE。0のみがFALSE (負の数もTRUE
  • 日付の実体は数値なので、実体が数値0である1990/1/0を除いて日付はすべてTRUE
  • 未入力はFALSE
  • 文字列の"TRUE"と"FALSE"はそのまま論理値として処理される。このとき、大文字小文字の区別はなし
  • それ以外の文字列は#VALUEエラー(空文字や半角空白もエラー)

image
右に=NOT(NOT(値))の計算結果も示している。
この数式は値がTRUEと解釈できる値であるなら論理値TRUEを出力し、FALSEと解釈する値であるなら論理値FALSEを出力する。

=NOT(NOT(値))の数式について詳解

NOT関数は引数の値がTRUEと解釈できる値なら論理値FALSEを出力し、逆にFALSEと解釈できる値なら論理値TRUEを出力する関数。
NOT関数の計算結果を更にNOT関数で処理することにより、「反対の反対」となる結果を求めることになるので、
即ち、「TRUEと解釈される値」を「論理値TRUE」に変換することができる。FALSEも同様。

NOT 関数 - Office のサポート

TruthyとFalsyの理解により書けるようになる数式

Truthy、Falsyの概念を理解することで、IF文の第1引数の条件式を短くシンプルに書くことができるようになる。
ただし、Excelが得意じゃない人と一緒に触るシートで無闇にやってしまうと却ってトラブルの元になるので注意。

以下のような数式のIF文中の0との比較する処理は不要であるため、省略できる。

COUNT関数による存在確認

指定したセル範囲に数値が入っているセルがあれば「●」を出力する数式

普通の書き方

image.png

ふつう
=IF(COUNT($A$1:$A$10)>0, "●", "-")
=IF(3>0, "●", "-")
=IF(TRUE, "●", "-")
="●"

↓ ↓ ↓ ↓

シンプルな書き方

COUNT($A$1:$A$10)の結果は必ず0以上の整数になる。
1以上のときに「●」。0のときだけ「-」が出れば良いのであれば、1以上の数値はTruthyで0はFalsyなので、第1引数の数式中の>0の部分はあってもなくても結果に影響しない。
image.png

Simple!
=IF(COUNT($A$1:$A$10), "●", "-")
=IF(3, "●", "-")
=IF(TRUE, "●", "-")
="●"

COUNTIF関数とワイルドカード文字によるLIKE検索

A1セルの中身がcで始まり、何らかの1文字を挟んでtで終わることを検証する数式

普通の書き方

image.png

ふつう
=IF(COUNTIF($A$1,"c?t")>0, "●", "-")
=IF(1>0, "●", "-")
=IF(TRUE, "●", "-")
="●"

↓ ↓ ↓ ↓

シンプルな書き方

COUNTIF($A$1,"c?t")の結果は、条件に合えば1。合わなければ0が出力される。
先ほどと同様の理由で第1引数の数式中の>0の部分はあってもなくても結果に影響しない。
image.png

Simple!
=IF(COUNTIF($A$1,"c?t"), "●", "-")
=IF(1, "●", "-")
=IF(TRUE, "●", "-")
="●"

参考リンク

論理関数 (リファレンス) - Office のサポート

aqril_1132
時短のために時間を惜しまず、結果として作業時間が伸びる残念な人。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away