結構な人がよく分からない思い込みの元「何となく」使ってしまっているIF関数について詳解。
#IF関数の基本の動作
ExcelのIF文は第1引数の論理式の解がTRUE
(=真)となれば、第2引数の文を実行、
FALSE
(=偽)となれば第3引数の文を実行。第3引数がなければ論理値FALSE
が出力される関数。
=IF([[第1引数]], [[第2引数]], [[第3引数]])
また、TRUE
、FALSE
の2つをまとめて「真偽値」と呼ぶ。
セルに直接「TRUE」や「FALSE」と打ち込んだ場合、あるいは「=A1<B1
」「=A1=B1」のような数式をセルに入力した場合、その結果が真偽値になり、ただの文字列とは異なる性質を持つ。
IF関数の実行例
第1引数に真偽値が直接入っている場合
まずこんな使い方はしないものの、IF関数の動作を最もシンプルに理解するための一番単純な例として説明。
第1引数がFALSE
であり、かつ第3引数があるとき、第3引数の文が実行される。
第1引数がFALSE
であり、第3引数が存在しないとき、FALSE
が出力される。
第1引数の論理式の解が真偽値となる場合
実際に使う数式に少し近づけた例として説明。
前提として、
- 「1は5未満である」という命題は正しいので「真(TRUE)」である。
- 「5は1未満である」という命題は誤っているので「偽(FALSE)」である。
以下のIF文では、第1引数に入力されている数式1<5
という論理式の解がTRUE
であるため、第2引数の文が実行されている。
数式1<5
という論理式の解がTRUE
であることは以下の数式で確かめることができる。
第1引数に入力されている数式5<1
という論理式の解はFALSE
であるため、第3引数の文が実行される。
第1引数の計算に使う値を他のセルから参照しても勿論同じように動作する。
また、第2引数、第3引数に数式を入れた場合、その結果が出力される。
※ LEN関数は対象の文字列の文字数を出力する関数。セルA2には29文字の文字列が入力されているので、LEN(A2)
の計算結果は29。そこから10を引いて19が出力されている。
#IF文の第1引数の論理式の解が真偽値とならない場合
IF文の第1引数の計算結果がTRUEかFALSEと解釈できない場合、IF関数の計算結果はエラーとなる。
しかし、、第1引数の計算結果が実際には真偽値でなくても、真偽値と解釈できる場合、その解釈に従ってIF関数が動作する。
ちなみに、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エラー(空文字や半角空白もエラー)
右に=NOT(NOT(値))
の計算結果も示している。
この数式は値がTRUEと解釈できる値であるなら論理値TRUE
を出力し、FALSE
と解釈する値であるなら論理値FALSE
を出力する。
`=NOT(NOT(値))`の数式について詳解
TruthyとFalsyの理解により書けるようになる数式
Truthy、Falsyの概念を理解することで、IF文の第1引数の条件式を短くシンプルに書くことができるようになる。
ただし、Excelが得意じゃない人と一緒に触るシートで無闇にやってしまうと却ってトラブルの元になるので注意。
以下のような数式のIF文中の0との比較する処理は不要であるため、省略できる。
####COUNT関数による存在確認
指定したセル範囲に数値が入っているセルがあれば「●」を出力する数式
#####普通の書き方
=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
の部分はあってもなくても結果に影響しない。
=IF(COUNT($A$1:$A$10), "●", "-")
=IF(3, "●", "-")
=IF(TRUE, "●", "-")
="●"
####COUNTIF関数とワイルドカード文字によるLIKE検索
A1セルの中身がc
で始まり、何らかの1文字を挟んでt
で終わることを検証する数式
#####普通の書き方
=IF(COUNTIF($A$1,"c?t")>0, "●", "-")
=IF(1>0, "●", "-")
=IF(TRUE, "●", "-")
="●"
↓ ↓ ↓ ↓
####シンプルな書き方
COUNTIF($A$1,"c?t")
の結果は、条件に合えば1。合わなければ0が出力される。
先ほどと同様の理由で第1引数の数式中の>0
の部分はあってもなくても結果に影響しない。
=IF(COUNTIF($A$1,"c?t"), "●", "-")
=IF(1, "●", "-")
=IF(TRUE, "●", "-")
="●"