STUDY387

エクセルで仕事をもっと簡単にしよう

入れ子のIF関数の代わりにLOOKUP関数で数式を短くする!

time 2014/08/25

入れ子のIF関数の代わりにLOOKUP関数で数式を短くする!
※ エクセル2013で説明しています。

IF関数はとても便利な関数ですが、条件が沢山あるとIF関数を何個も入れ子にして、とても長い数式になってしまいます。

たとえば、100点を「特A」、99~80点を「A」、79~60点を「B」、59~40点を「C」、39~20点を「D」、19~0点を「E」と成績をつけたい場合、この式は「=IF(点数=100,"特A",IF(点数>=80,"A",IF(点数>=60,"B",IF(点数>=40,"C",IF(点数>=20,"D","E")))))」となります。
excel-lookup01

なが~い式ですよね。この式を少しでも短く簡素化したい人は、LOOKUP関数を使ってみてください。

先ほどのIF関数の式をLOOKUP関数で書き換えると、以下のようになります。
=LOOKUP(B2,{0,20,40,60,80,100},{"E","D","C","B","A","特A"})
excel-lookup02

随分スッキリした式になりました。LOOKUP関数を初めて見た人でも、式から感覚的にどのような動きをする関数なのかイメージがつくかと思います。

では、LOOKUP関数の式の構造を見てみましょう。

LOOKUP(検査値,検査範囲,対応範囲)

指定した検査値を検査範囲内で検索し、一致したら対応範囲内から返す値を抽出します。

  • 第1引数の検査値:検索する値を指定します。今回は"点数"です。
  • 第2引数の検査範囲:検索範囲を指定します。今回は{0,20,40,60,80,100}で成績を決める基準となる点数の配列を指定しました。
  • 第3引数の対応範囲:検索後の返す値を指定します。今回は{"E","D","C","B","A","特A"})で成績の配列を指定しました。

つまり、LOOKUP関数は各個人の点数を検査範囲{0,20,40,60,80,100}内で検索し、一致したら対応範囲{"E","D","C","B","A","特A"}から返す値を抽出しています。

注意点があります。それは「検査範囲を昇順に並べる」ことです。昇順に並べないと正しく機能しません。そのため、今回作成した第2引数の検査範囲は、0から並んでいます。

また、検査範囲内に検査値と同値がない場合、検査範囲のなかで検査値以下の最大値を一致する値とします。たとえば、70点の場合、検査範囲のなかに同値がありません。そのため、検査範囲内にある70以下の最大値である60が一致する値になります。その結果、第3引数の対応範囲内で60と同じ位置(左から数えて4番目)にあるBが返されます。

ちなみに、配列をご存知でしょうか?配列の意味をネットで調べると以下のように出てきますが、個人的な文系的解釈では「計算に必要な値を並べてグルーピングしたモノ」です。

配列とは、複数のデータを連続的に並べたデータ構造。各データをその配列の要素といい、自然数などの添字(インデックス)で識別される。

IT用語辞典 e-Wordsより

つまり、今回の例では「成績を決める基準となる各点数を並べてグルーピングしたもの」と「成績を並べてグルーピングしたもの」を作りました。これら配列は、下の例のようにセル範囲で指定した検査範囲や対応範囲と同じ役割をしています。
excel-lookup03

このようにLOOKUP関数と配列を使うと、入れ子のIF関数の代わりになるんですね。素晴らしい!!

検索をして値を抽出する関数には、VLOOKUP関数やHLOOKUP関数があるので、LOOKUP関数を使う頻度はそれほど多くないですが、配列を使ったLOOKUP関数だけは便利だなと思います。
お役に立ちましたか?ご活用ください♪

sponsored link



sponsored link

sponsored link

何はともあれOFFICEのことならマイクロソフト。意外とキャンペーンやっています。

コピー用紙あったかな?トナーもあったかな?事務用品はアクスルへGO!