皆さんはエクセルのリストから、目的のデータを抽出する時は何を使用していますでしょうか。VLOOKUP関数を用いたり、条件付き書式を使ったりと、人それぞれ工夫があるかと思います。
今回はIF関数を用いて卵のサイズ規格を例として、複数の条件を処理する方法を紹介します。
古いバージョンから存在するIF関数ですが、AND関数と組み合わせることで複雑な処理も可能なので、参考にしてみてください。
【数値の判定】ISNUMBER()関数をつかう
ここで説明するステップは省略可能ですが、まず最初に正常に数値が入力されているかどうかを判定したいと思います。
例えば、卵の計量結果が以下の表のようになったとします。
この表では、5番目は空欄になっており、9番目はデータが欠損のため、”N.D.”と入力されています。
1.サイズの列に数式として『=ISNUMBER(B3)』と入力します。
ここでの『B3』は数値かどうか判定したいセルです。
2.今回の例では、1番には数値が入力されているので『TRUE』が返されました。
もし、ISNUMBERのスペルミス等があれば数式に関するエラーが出ます。
3.数式が入力出来たら、すべての行『ここではC3~C12まで』に同じ数式を適用します。
5番と9番には数値が入力されていないので『FALSE』が返されています。
他の行にも同じ数式を適用する際、『Ctrl + C ⇒ Ctrl + V』のコピー&ペーストでも数式ごとコピーされるので使用できます。
今回の表ように縦または横一列にコピペしたいセルが並んでいる時は、マウス操作で簡単にコピー&ペーストができます。
数式を入力したセルの右下(ここでは最初に数式を入れたB3セルの右下)にマウスポインタ―を持っていくと、+マークになるので、その状態で目的のセルまでドラッグすると、一気にコピーできます。
この時、ドラッグではなくダブルクリックでも同様にコピー&ペーストができます。
コピーした後のそれぞれのセルを見ると、自動的に数式の参照セルも変更してくれているので便利です。
今回はISNUMBER()関数を使って説明しますが、その他にもIFERROR()関数を使った判定もよく使います。
【条件の判定】IF()関数をつかう
ここではIF関数の基本をおさらいします。IF関数は以下のように記載します。
=IF(①理論式, ②[値が真の場合], ③[値が偽の場合])
①理論式:IF関数で判定する理論式を設定します。
②値が真の場合:理論式による判定が真(TURE)だった場合の出力内容を設定します。真の値の部分にさらに計算式や別の関数を設定することもできます。
③値が偽の場合:理論式による判定が真(FALSE)だった場合の出力内容を設定します。
例えば『=IF(A1=1,B1/C1*100,”×”)』と入力すると『A1セルに数値の1が入力されていれば、B1/C1*100という計算をしなさい、それ以外であればテキストの”×”を返しなさい』という風に判定されます。
それ以外でも『=IF(A1=””,”未入力”,”済み”)』と入力すると『A1セルが空欄だったら”未入力”を、そうでなければ”済み”を返しなさい』という風に、ダブルクォーテーション””をつかってテキストを判定することもできます。
今回の例のように、ISNUMBER()関数と組み合わせて、『=IF(ISNUMBER(B3),”○”,”N.D.”)』とした場合、
『B3に数値が入力されていればテキストの”○”を、そうでなければテキストの”N.D.”を返しなさい』という判定をすることができます。
【同時条件】AND()関数をつかう
ここではAND()関数の基本をおさらいします。AND()関数は以下のように記載します。
=AND(理論式1,理論式2, ・・・,理論式n)
理論式1、かつ理論式2、・・、かつ理論式nの全てに該当した場合は真(TRUE)を、それ以外には偽(FALSE)を返す、という意味になります。
ちなみに”AND”ですが理論式1つだけでもエラーなく判定してくれます。
AND()関数を用いることで、同時に複数の条件を設定してあげることができ、日本語で言えば『AかつB』の『かつ』に相当する表現を判定することができます。
今回のたまごSSサイズのであれば 40g ≦ SS < 46g なのでAND()関数を使って表現すると
=AND(A1>=40,A1<46)
と記載することで判定できます(A1は判定したいセルの番号)。
エクセルで条件を入力する時、以下のように入力します。特にノットイコールの<>は情報処理を学んだ方からすれば当たり前かもしれないですが、知らないと表現できないので覚えておきましょう。
例では判定するセルを前にして=AND(A1>=40,A1<46)と記載しましたが、
セルと数値の記載を逆にして『=AND(40<=A1,46>A1))』と書くこともできます。
どちらでも問題ないですが、統一しておくとよいでしょう。
今回はAND()関数を使って複数条件を処理しますが、同じようにOR()関数も有用です。
OR()関数は以下のように記載します。
=OR(理論式1,理論式2, ・・・,理論式n)
理論式1、もしくは理論式2、・・・、もしくは理論式nのどれかに該当した場合は真(TRUE)を、すべてに非該当の場合は偽(FALSE)を返す、という意味になります。
状況に応じて使い分けましょう。
ちなみにAND()関数と同様に理論式1つだけでもエラーなく判定してくれます。
【複数条件の判定】IF()関数を重ねて使う
判定の順序
IF関数は、真の判定で複数条件を設定する場合と偽の場合で複数条件を設定する場合で、流れが少し異なってきます。
ただしそこまで深く考えなくても同じようにできるので、まずはエラーなく数式を少しずつ書いてみましょう。
判定結果を見ながら少しずつ、作りこんでいくとよいかと思います。
もちろん、真の判定、偽の判定の両方に複数条件を設定することもできます。
個人的には煩雑になりがちなのでほどほどにしておくのがよいと思います。
今回の例では、以下のフローチャートのように偽の判定をメインにして複数条件を設定していきたいと思います。
判定の順序は入れ替わっても問題なく処理できますが、人間が見ても分かりやすいように小さい方から(もしくは大きい方から)順番に記載しておくとよいです。
IF()関数の重ね書き
ここからは実際にエクセルの数式に落とし込んでいきます。
IF()を用いた複数条件は、IF()関数の中にさらにIF()関数を重ねて記載することで処理することができます。
1.まずは『=IF(ISNUMBER(B3),IF(AND(B3>=40,B3<46),”SS”,”○”),”N.D.”)』と入力します。
わかりやすいように重ね書きのIF()関数の部分は赤字にしました。
2.一度、確定し、意図した通りに判定がされているか確認します。
この手順は省略可能ですが、記載が長くなりそうな数式はエラーが出るリスクも高くなるので、細分化して確認しておくと間違い防止になります。
3.さらに『=IF(ISNUMBER(B3),IF(AND(B3>=40,B3<46),”SS”,“○”),”N.D.”)』の赤字の”○”の部分に、『IF(AND(B3>=46,B3<52),”S”,”○”)』と次の条件を記載していきます。
4.これを少しずつ確認しつつ、最後まで書いていきます。
最終的に今回は以下のような記載になりました
『=IF(ISNUMBER(B3),IF(AND(B3>=40,B3<46),”SS”,IF(AND(B3>=46,B3<52),”S”,IF(AND(B3>=52,B3<58),”MS”,IF(AND(B3>=58,B3<64),”M”,IF(AND(B3>=64,B3<70),”L”,IF(AND(B3>=70,B3<76),”LL”,”規格外”)))))),”N.D.”)』
長い数式を書いているとカッコが多くて、閉じるカッコ『)』の数が分からなくなる時があります。そんな時は数式バーを大きくして確認するとよいです。
・対応するカッコは同じ色になっています。
・カッコ部分をカーソルで行ったり来たりまたぐと、太字で対応するカッコがどれかを示してくれます。
今回の表の卵の重さはRNADBETWEEN()関数を用いて『=RANDBETWEEN(38,78)』と記載し、38~78までの整数をランダムに自動生成しております。
図によって、数値がバラバラなのはこのためです。
さいごに
IF関数にはSUMIF関数や、COUNTIF関数など関連した関数が用意されていますが、今回使用したIF関数はその中でも最も基礎的な関数です。
使い方を覚えていると応用も効きますし、数式は多少長くなるかもしれませんが、より複雑なマトリックスも判定できるようになります。
使う場面が限定されず、非常に汎用性が高いのでぜひ試してみてください。
VLOOKUP等ではうまく解決できなかった処理に対して、何か糸口が見つかるかもしれません。
皆さんのお仕事に少しでも役立てれば幸いです。ではまたノシ
コメント