こんにちはカフェインレスです。
今回はIf関数について書いていきたいと思います。
If関数というのは、「もし○○なら▲▲にする」という関数で、
エクセルを習い始めた人ならかなり序盤に勉強する関数です。
しかし、かなり序盤に勉強する関数にしては、
And関数やOr関数などの他の関数がはいってきたり、
そもそもIf関数でない事柄について頭を悩ませることが多く、
エクセルを諦めた人の多くが、If関数とか意味分かんなくないですか?と
口をとがらせる印象があります。
確かに、If関数は使い方を間違えるとすごく複雑になります。
でも、覚えれば良い書き方は5つだけです。
なんだか難しいなーと思ったら、それはIf関数の書き方ではなく、
アルゴリズムが複雑だからです。
If関数はとても便利な関数ですので、使いこなせるようになると、
エクセルのレベルアップを実感できますので、ぜひマスターして下さい。
If関数の基本
まず、If関数の基本からおさらいしましょう。
If関数自体はすごくシンプルな関数です。
=if( 判定式, 判定式が正しい場合, 判定式が正しくない場合 )
このように記述します。
ちなみに判定式が正しくない場合は省略できます。
もう少し具体的な式を書きます。
A1セルの判定を行う式です。
=if(A1=1,True,False)
A1が1であればTRUE,そうでなければFALSEが出る関数です。
ちなみにTRUEとFALSEは判定式でよく出てくるので、If関数と一緒に使うと便利です。
下記の理解で良いと思います。
TRUE = “○”
FALSE = “X”
今度は、A1が2であればTRUE、そうでなければFALSEを返す関数を考えて下さい。
これもすぐですね。
=if(A1=2,True,False)
では次に、A1が1であれば1を、A1が2であれば2を、それ以外はFALSEで返す関数を考えて下さい。
急にレベルが上がったと感じたかもしれません。
分かります。
けど、そんなに難しく考える必要はありません。
このように書けば良いです。
=if(A1=1,True,False)
=if(A1=2,True,False)
ん?意味が分からない、と思ったと思います。
すみません。
ただ、ぼくは一言も一つのセル内に判定式を書いて、とは言っていません。
なので、2つのセルに書けばいいんです。
このように、それぞれの場合において判別できています。
いやいや、でもそれかっこ悪くない?と思われたかもしれません。
おそらくかっこ悪いと思われた方は、1つのセルですべての処理を行うことを
イメージしておられたのだと思います。
けど、かっこ悪くても良いんです。
関数を使う目的は、エクセルをかっこよく書くことではなく、
業務を改善するためです。
初心者のうちはかっこ良く書く必要はありません。
業務改善に使う必要がなければ、難しいことは覚える必要はありません。
これ以降は少し難しいことを記述していきますので、存在だけ知っておいて下さい。
存在だけでも知っておくと、あとで戻ってきて勉強ができます。
あとで戻ってきた時というのは、実際に必要な時なので、かなり頭に入りやすいです。
複数処理を1つのセルで行う場合
では次は、「A1が1であれば1を、A1が2であれば2を、それ以外はFALSEで返す関数」を
1つのセルに書きたいと思います。
下記が実際の式となります。
=if(A1=1,1,if(A1=2,2,false))
セル内での改行は[Alt + エンター] (Altキーを押しながらエンターキーを押すこと)です。
これでもまだ分かりにくいと思うので、下記を見てください。
ちなみに関数の中に関数を書くことを入れ子(またはネスト)と言います。
ただ、if関数は比較的入れ子が簡単な関数です。
2つの判定を行う場合
改行するとすごくシンプルになりましたね。
[if(判別式、判別式が正しい場合,] ← このセットが2個あるだけです。
では、次は5つの場合の判定を行う場合の関数を書いてみましょう。
えっ5個、と思ったと思いますが、[if(判別式、判別式が正しい場合,]このセットが増えるだけです。
なんかパターンが見えてきませんか?
もしなんかできそう、と思ったら多分もう大丈夫です。
実際に1-5を判別する関数を書いてみてください。If関数は理解できています。
受験勉強では、わかるとできるは違う、できるまでやると教わったかもしれませんが、
仕事は何かを参考にしながら行うことができるので、なんとなく分かれば十分です。
もしIf関数が書けても、業務改善には使えないという場合は、
And関数やOr関数が必要とされているか、
場合分けやアルゴリズムの問題となることがほとんどです。
実際に判別式を5個も書くことはありませんし、可読性が下がるのでできれば避けたいです。
可読性とは、その式がすぐに理解できるか、という視点です。
複雑な式よりもシンプルな式の方が、圧倒的に読みやすい(可読性が高い)です。
可読性が高いほうが、エラーが起こった時の対処や、
数カ月後に見なおした時に理解がしやすいです。
なので可能な限り、If関数の場合分けはシンプルにしましょう。
「判定式が正しくない場合」の使い方
上記では、If関数の「判定式が正しい場合」(正の場合)のみを主に使いました。
では、「判定式が正しくない場合」(負の場合)はそんなに使わないの?と思われたかもしれません。
ぼくは、「負の場合」はこのように使います。
=if(A1=””,””,A1*10)
この式の意味は、A1が空白だったら空白。
そうじゃなければA1に10を掛けてという意味です。
この場合、A1に数字が入ってないと「0」という文字が入ってしまい、
その書類を提出する場合、見栄えが悪いですし、数字が入っていないのではなく、
「0」であるとも誤解されません。
そのため、参照するセルに文字が入っていなければ、空白セルにする、というのは
かなり使い勝手がいいです。
エクセルの書式設定の変更でも0が入らないように出来るらしいのですが、
ぼくはこの関数を知っているので、その設定がめんどくさくて使っていません。
あとでこの関数を足すときも、最後をかっこで閉じなくても、
下記の状態でエンターをクリックすれば自動でかっこを入れてくれます。
=if(A1=””,””,元の関数
頻繁に使う機会があるので、覚えておくと便利です。
And関数とOr関数
And関数とOr関数はよく判別式に使われます。
判別式がどうしても1つではなく、2つ以上になってしまう時がありますよね。
ただ、判別条件はできるだけ少なくして下さい。
複雑な判別条件を作ってしまうとエラーが出た時にもの凄く苦しむことになります。
それではさっそく関数の記述方法について、説明します。
まず、And関数はこの様に書きます。
=And(A1=1,B1=2)
この関数の意味は、
「A1が1で、B1も1ならTRUE、それ以外の時はFALSEを返す」です。
またOr関数は、この様に書きます。
=Or(A1=1,B1=2)
この関数の意味は、
「A1が1、もしくは、B1も1ならTRUE、それ以外の時はFALSEを返す」です。
If関数と場合分け
If関数の場合分けについては、できるだけシンプルにするのが基本です。
ただ、シンプルにしろって言われたって…すでに複雑なんだけど、どうすれば?
という時は、まずその複雑さを解消できないか、を考えてみてください。
発想を転換することによって、そもそも場合分けが不要になる事は多々あります。
もしくはデータベースを使ってどうにかできないか考えて下さい。
ぼくも初めてエクセルで作った仕組みはif関数を60個以上入れ子にしました。
と言っても複雑な場合分けがあったわけではなく、1のときはA、2のときはBみたいな、
非常に単純な呼び出しでした。
しかし60個以上もあるので、デバック(エラーの検出)にもひどく時間が掛かりましたし、
その式を書くことにものすごく時間が掛かりましたし、書く気になれなかったので、
思いついてから手を動かすまでに非常に時間が掛かりました。
このような1対1の呼び出しには、If関数ではなくデータベースを作って、
vlookup関数を使って下さい。
この様なデータベースを作って、
1 | A |
2 | B |
3 | C |
=vlookup(A1,テーブル範囲、2,false)と書けば、
1はA、2はB…と、対応するデータが取り出せます。
まとめ
If関数はシンプルで非常に使い勝手の良い関数です。
慣れてくれば複雑な事象でもIf関数で書ける様になりますが、
まずはできるだけIf関数を使わないで解決できないか、を考えて下さい。
あとあとエラーが出たときに、Ifによる非常に複雑な分岐が原因だった場合、
考えるのも嫌になりますし、解決にもかなり時間が掛かってしまいます。
If関数が難しい…と感じたとき、実際に難しいのはIf関数ではありません。
その事を念頭に置いておけば、If関数は簡単に使いこなせるようになると思います。
ぜひ色々なアルゴリズムを解いてみて、シンプルにIf関数を使いこなせるようになってください。
こちらはIf関数のアルゴリズムの練習にオススメです。
生徒の成績表から合格可否を判定するシステムを作る練習問題です。
複雑そうに見えますが、今回学んだことだけで簡単に作れます。
If関数って難しく考えられすぎだと思う(問題編)
下記も参考になると思います。
If関数と相性の良いプルダウンリストの作成方法です。
プルダウンリストで特定の文字のみを入力する方法と応用
入れ子については、こちらの記事も参考になると思います
勉强してもエクセルが身につかない理由