Excelで、IF関数の条件(正確には論理式)を記述するときに、比較演算子であるイコールまたは不等号が必須であると勘違いをしている人が多いようです。IF関数の論理式とは、その言葉のとおり論理値を返す式であって「比較かどうかは無関係」です。
大小関係である必要もないし、一致・不一致である必要もありません。
論理値(TRUE・FALSE)またはそれに準じる値を返す計算式であれば、比較でなくても論理式として記述することは可能です。それを知らずに「分かりにくい」だの「読みにくい」だの意味不明なことを言っている暇があったら、しっかりとIF関数の練習をやり直したほうが良いです。
そこで、今回は、比較演算の無い論理式の練習問題を大量に出題しますので、ぜひ正しい知識を身につけていただきたいと思います。
目次
- 1.論理値とIF関数
- 2.判定だけを分離する
- 3.数値の1と0
- 4.論理積
- 5.未入力または0であることの判定
- 6.「すべて」は個数で判定せよ!
- 7.論理値を返す関数
- 8.補足:「1から論理値を引く」と否定になる
- 9.動画版はこちら(無料)
1.論理値とIF関数
(1)論理値とは何か
問題
セルA1に「true」、セルA2に「false」と入力しなさい。
解説
セルA1に小文字で「true」と入力します。
大文字の「TRUE」になって、自動的に中央揃えになります。
セルA2に小文字で「false」と入力します。
大文字の「FALSE」になって、自動的に中央揃えになります。
Excelで文字列を入力すると自動的に左揃えになります。また、数値を入力すると自動的に右揃えになります。このようにExcelは入力されたデータの種類を認識して、その種類に応じて書式を設定します。
TRUEとFALSEは自動的に中央揃えになりますから、文字列でも数値でもないデータの種類であると認識していることになります。
これを論理値(logical value)または真理値といいます。Excelには文字列と数値のほかに論理値というデータの種類があります。
(2)論理式に論理値を指定するとどうなるか
問題
IF関数で論理式のところにTRUEまたはFALSEと入力するとどうなるか。
解説
IF関数を挿入します。論理式の部分に「TRUE」とだけ入力したとします。
第2引数に○、第3引数に×と入力したとします。○になります。
IF関数は、論理式の部分を判定した結果、TRUEであれば第2引数、FALSEであれば第3引数の値または計算を返します。つまり、TRUEを第2引数に、FALSEを第3引数に変換します(参考:IF関数は、判定しているのではなく「変換しているだけ」であることを理解せよ)。
したがって、IF関数の論理式の部分にTRUEと入力すると、第2引数で指定した値が常に表示され、第3引数は無視されます。
今度は論理式の部分を「FALSE」にします。
常に×になります。
IF関数の論理式の部分にFALSEと入力すると、第3引数で指定した値が常に表示され、第2引数は無視されます。
(3)論理値を入力したセルを参照する
問題
A列にTRUEとFALSEを適当に入力した。TRUEであれば「○」、FALSEであれば「×」と表示しなさい。
解説
IF関数を挿入します。セルA1を参照します。第2引数に○、第3引数に×と入力します。
これでTRUEが○に、FALSEが×になります。
IF関数はTRUEやFALSEを別の文字列や記号に変換する関数であって、論理式の部分で必ず比較演算をしなければならないという決まりはありません。
すでに、TRUEまたはFALSEと表示されているセルがあれば、そのセルを参照するだけで、IF関数の論理式となります。
<補足> 「=IF(A1=TRUE,"○","×")」とするのは絶対にやめましょう。論理値であるA列の値によって、第2引数を返すのか、第3引数を返すのかが決定され、ダイレクトに変換できます。TRUEと比較するのは全く無意味であり、可読性も損なわれます(平たく言えば馬鹿っぽいのでやめましょうという意味です)。
2.判定だけを分離する
問題
セルB1に入力した金額の5%引きの値段と送料880円を足した合計金額を求めなさい。ただし、セルC1に「放送終了後30分以内」と入力した場合は、割引率を60%にして、送料を無料にしなさい。
解説
セルC1が「放送終了後30分以内」であることを判定します。
TRUEであれば60%割引、つまり40%とし、送料を0円とします。FALSEの場合は5%引き、つまり95%とし、送料を880円とします。
セルC1が「放送終了後30分以内」であれば40%とし、そうでなければ95%とします。このパーセンテージに元の金額を掛けます(参考:【Excel】IF関数の共通部分を外に出す、ある条件のときだけ計算を追加する)。
セルC1が「放送終了後30分以内」であれば0円とし、そうでなければ880円とします。
合計を求めます。
これで完成です。
別解
ところで、割引価格も送料もセルC1が「放送終了後30分以内」であることを判定しています。
この判定だけを別のセルで行う事を考えます。
セルC1が「放送終了後30分以内」であることを判定します。
TRUEとなります。
セルD1は必ずTRUEかFALSEになります。
IF関数の論理式はセルD1を参照するだけです。
セルD1がTRUEであれば40%とし、そうでなければ95%とします。このように、判定を別のセルで行った場合、その時点で比較演算が終わっているので、論理式はセル参照をするだけでよいのです。
このパーセンテージに元の金額を掛けます。
セルD1がTRUEであれば0円とし、そうでなければ880円とします。
これで完成です。
3.数値の1と0
(1)論理値は四則演算があると数値とみなされる
問題
TRUEとFALSEを入力した。これらに1を掛けるといくつになるか。
解説
TRUEとFALSEは特殊な種類のデータであり、文字列や数値とは異なる論理値です。
しかし、この論理値は前後に足し算や掛け算などの四則演算があると数値とみなされるという性質があります。
TRUEは1、FALSEは0とみなされます。
このため、TRUEに1を掛けると1×1で1、FALSEに1を掛けると0×1で0となります。
クイズで正解すると1ポイント、不正解なら0ポイントとなりますが、それと同じように、コンピュータでは正しいこと、TRUEのことを数値の1で表します。また、否定的なこと、存在しないこと、FALSEのことを数値の0で表します。
(2)数値の1と0は論理値とみなされる
問題
A列に1または0をランダムに入力した。1であれば○、0であれば×を表示しなさい。
解説
IF関数では論理式のところにTRUEまたはFALSEを直接指定しても良いです。Excelでは、TRUEとFALSEの代わりに1と0を使っても良いです。数値の1はTRUEとみなされ、数値の0はFALSEとみなされます。
IF関数を挿入します。論理式としてA1を参照するだけでよいです。
1はTRUEとみなされるので○、0はFALSEとみなされるので×とします。これで完成です。
はじめから1と0しかないことが分かっている場合、論理式はセルを参照するだけで良いです。1の場合を第2引数、0の場合は第3引数の値が表示されます。
(3)削除フラグ
問題
B列に1と入力していれば空白とし、それ以外はA列の数値を2倍して表示しなさい。
解説
何も入力していない空白セルは、論理式では数値の0、つまりFALSEとみなされます(参考:【Excel】空白セルの判定をして、IF関数で「空白文字列」を返す方法と注意点)。
したがって、わざわざ1と0を両方入力しなくても、1を入力すればTRUE、何も入力しなければFALSEとみなされます。
IF関数を挿入します。
B列を参照します。これが1であれば除外なので空白、それ以外はA列の数値を2倍します。
これで完成です。
このように除外するための列を設けて、1と入力することによって除外することを表すことを除外フラグまたは削除フラグということがあります。
4.論理積
問題
英語と数学がそれぞれ70点以上であればTRUEと表示しなさい。また、これを利用して、英語と数学が両方とも70点以上であれば合格、そうでなければ不合格と表示しなさい。
解説
比較演算を用いてそれぞれ70点以上であることを判定します。
オートフィルをします。70点以上であればTRUE、そうでなければFALSEとなります。
この2つを掛けます。
0と1になります。
TRUEやFALSEは前後に四則演算があると数値とみなされるという性質があり、TRUEは1、FALSEは0とみなされます。両方ともTRUEの場合、掛け算をすると1×1で1となります。
どちらか一方がFALSE、つまり0の場合は掛け算をすると必ず0となります。
つまり2つの条件を両方とも満たす場合は1、どちらか一方でも条件をクリアしない場合は0となります。論理値の掛け算のことを「論理積」と言います。
両方とも70点以上であれば合格とするのですから、論理値を掛け算して、1であれば合格、0であれば不合格とすればよいのです。
2つを掛けたものを論理式として、1の場合は合格、0の場合は不合格とします。
これで完成です。
別解
直接判定するには、2つの比較演算を直接掛け算します。
両方TRUEの場合は掛け算で1となり合格、そうでなければ不合格とします。
これで完成です(AND関数については後述)。
5.未入力または0であることの判定
(1)0かそれ以外かの判定
問題
-5から5までの数値を入力した。0であれば×、それ以外は○と表示しなさい。
解説
TRUEとFALSEは直前又は直後に四則演算があると、それぞれ1と0とみなされます。
また、論理式に1と0を入力すると、それぞれTRUEとFALSEとみなされます。
それでは、他の数値を論理式とした場合はどうなるかをやってみましょう。
IF関数を挿入します。A列の数値を参照し、TRUEであれば○、FALSEであれば×とします。
0以外すべて○になりました。
論理式のところに数値を指定すると、0だけFALSEとなり、それ以外はプラスかマイナスかにかかわらず、すべてTRUEとみなされます。
この性質を利用して、0かそれ以外かを判別することができます。
空白にすると×になります。
何も入力していない空白セルを参照すると数値の0とみなされるので、FALSEとなります。未入力セルと0はFALSE、それ以外はTRUEです。
数値が入力されていることが分かっていて、0または未入力であることを判定する場合、比較演算をする必要はありません。
(2)ゼロ除算の回避
問題
昨年と今年の数値を比較して昨年比を求めなさい。ただし、昨年の実績がない場合は「*」と表示しなさい。
解説
昨年比は、変化した後の数値である今年の実績を、変化する前の数値である昨年の実績で割ります。
昨年より今年のほうが成績が良い場合は100%を超えます。
ところが、昨年の実績がない場合や入力していない場合はエラーになります。
昨年比は昨年の数値の何倍になったかを表すものであり、元の数値が0であれば何倍しても0なので求めることができないのは当たり前のことです。
数値を論理式として指定すると、何も入力していない空白セルと0は、FALSEとなりますので、これを利用して、TRUEであれば昨年比を計算し、FALSEであれば計算しないようにすればよいです。
IF関数を挿入します。昨年の数値を参照します。これがTRUE、つまり昨年の実績があれば昨年比を計算しますが、FALSEの場合は「*」を表示します。
これで完成です。
このように、割り算をする計算式の場合、割る数が0または空白のときに計算をしないようにします。
6.「すべて」は個数で判定せよ!
(1)すべて空白セルであることの判定
問題
それぞれの行で、A列~F列がすべて空欄の場合は「NG」と表示しなさい。
解説
まず、COUNTA関数で記号の個数を数えます。
COUNT関数やCOUNTA関数で個数を数えると、すべて空欄であれば0となります。
論理式の場合はFALSEです。このことを利用して、TRUEであれば空白を返し、FALSEであればNGと表示します。
IF関数を挿入します。1つ以上あれば空白、1つもなければNGとします。
これで完成です。
個数を数える関数のように、エラーでない限り必ず数値が返ってくる関数は、その答えが0かそうでないかを判定する場合、比較演算をする必要はありません。
(2)すべて入力されていることの判定
問題
各行の空白セルの個数を数えなさい。また、空白が1つでもあれば「NG」と表示しなさい。
解説
COUNTBLANK関数は選択した範囲の中で空白となっているセルの個数を数える関数です。
COUNTBLANK関数を挿入します。A列からF列を選択します。
空白が無ければ0となります。
COUNTBLANK関数で個数を数えると、空白があれば1以上になります。論理式の場合はTRUEです。
このことを利用して、TRUEであればNGと表示し、FALSEであれば空白を返します。
IF関数を挿入します。空白があればNG、空白が無ければ空白を返します。
これで完成です。
7.論理値を返す関数
(1)AND関数、OR関数
AND関数、OR関数も論理値を返す関数ですから、IF関数の論理式としてそのまま使えます。詳しくはこちらの記事をご覧ください。
(2)ISODD関数、ISEVEN関数
問題
A列の数値が奇数だけ〇をつけなさい。また、偶数だけ〇をつけなさい。
解説
ExcelにはISから始まる関数がいくつかあります。例えば、ISODD関数はODDつまり奇数であることを判定する関数です。
ISから始まる関数は、ある条件に当てはまるかどうかを判定して、条件を満たせばTRUE、条件に反する場合はFALSEを返します。
ISODD関数を挿入します。
セルA2を判定します。これは奇数なのでTRUEになります。偶数の場合はFALSEとなります。0も偶数です。
ISから始まる関数は判定した結果をTRUEまたはFALSEで返します。
なぜ、TRUEまたはFALSEを返すのかと言うと、IF関数の論理式として利用してもらうためです(それだけではありませんが・・・)。IF関数はTRUEまたはFALSEを別の文字列に変換します。
これを利用して、奇数と判定されたものは〇、そうでないものは空白を返します。
IF関数を挿入します。TRUEつまり奇数の場合は〇、そうでなければ空白とします。
これで完成です。
ISから始まる関数で判定した場合は、その関数自身がTRUEまたはFALSEを返すので、比較演算をする必要はありません。
ISEVEN関数を挿入します。セルA2を判定します。
偶数はTRUE、奇数はFALSEとなります。
ISEVEN関数は偶数であることを判定する関数です。偶数であればTRUE、奇数であればFALSEとなります。
IF関数を挿入します。TRUEつまり偶数の場合は〇、そうでなければ空白とします。
これで完成です。
ちなみに、空白セルは0とみなされますので偶数となります。
<補足>
「=IF(ISODD,~,~)」は、ODD(奇数)であれば第2引数を返します。また、「=IF(ISEVEN,~,~)」は、EVEN(偶数)であれば第2引数を返します。このように、ISから始まる関数を論理式とすると、「該当すれば第2引数を返す式」となります。
(3)ISERROR関数
問題
A列がエラーになっていればNGと表示しなさい。
解説
ISERROR関数はエラーであることを判定する関数です。エラーであればTRUE、エラーでなければFALSEとなります。
ISERROR関数を挿入します。セルA1を判定します。
エラーの場合だけTRUEになります。
IF関数を挿入します。TRUEつまりエラーの場合はNG、そうでなければ空白とします。
これで完成です。
<補足>IFERROR関数を用いる方法もあります。詳しくはこちらの記事をご覧ください。
(4)EXACT関数
問題
A列とB列の文字列を比較演算によって一致していることを判定した。ところが、明らかにA列とB列の内容が異なるのにTRUEになってしまった。A列とB列の文字列を比較して異なる場合は「×」と表示しなさい。
解説
数値も文字列も通常はイコールによって一致することの判定をすることができます。
しかし、一部例外があります。例えば、英語の大文字と小文字は区別されません。また、空白セルは0やFALSEと同じものとみなされます。
EXACT関数(イグザクト)は、2つの文字列を比較して、まったく同じである場合はTRUE、そうでない場合はFALSEを返します。2つの文字列の間にはカンマが必要です。
EXACT関数を挿入します。2つのセルを参照します。
すべてFALSEとなります。大文字と小文字も区別されます。
また、空白セルと入力されているセルも区別されます。
EXACT関数は、ISから始まる関数と同じようにTRUEとFALSEを返す関数です。このまま論理式として使用し、IF関数で別の文字列に変換することができます。
IF関数を挿入します。TRUEつまり一致すれば空白、そうでなければ×とします。
これで完成です。
8.補足:「1から論理値を引く」と否定になる
論理値は直前に引き算があるとTRUE=1、FALSE=0とみなされます。1からTRUEを引くと0=FALSEになり、1からFALSEを引くと1=TRUEになります。1から論理値を引くとTRUE/FALSEが逆になります。
- 1-TRUE=1-1=0 → FALSE
- 1-FALSE=1-0=1 → TRUE
ISERRORはエラーのときにTRUEとなりますが、逆にエラーでない場合をTRUEとするには、1から引けばよいです。「否定をするときは1から引く」と覚えておけば良いです。
- =1-ISERROR(A1)
条件付き書式のときに「TRUEを返す式」を入力する知識が必要になる。「=1-FALSE」の式を入力してもよい。
— わえなび the Theory of Word-Excel (@waenavi_jp) 2020年10月9日
(例)
数字ではなく、かつ空白でもない場合に色を付ける
=AND(1-ISNUMBER(A1),A1<>"")
数字または空白のときは色を付けない、と解釈するとこうなる。
=1-OR(ISNUMBER(A1),A1="") pic.twitter.com/io4BQ8wtd8
解説は以上です。
9.動画版はこちら(無料)
この記事は、わえなび実力養成講座「ファンダメンタルExcel13」Program 13-17、13-18、13-19、13-20 のYoutube動画を書き起こして、加筆修正したものです。
- ファンダメンタルExcel 13-17 比較演算のない論理式1(論理値)
- ファンダメンタルExcel 13-18 比較演算のない論理式2(1と0)
- ファンダメンタルExcel 13-19 比較演算のない論理式3(0であることの判定)
- ファンダメンタルExcel 13-20 比較演算のない論理式4(論理値を返す関数)