【論理式を短くする】関数IFに代わってLOOKUPを使う

分かれ道条件分岐 オフィスマスター学

エクセルで関数IFをよく使うけど、条件を色々と反映していると、どうしても論理式の部分が長く、複雑になってしまう・・・何とかシンプルにわかりやすくする方法はない?

 エクセル関数IFはよく使う関数ですが、ついつい論理式が長くなってしまいます

 後日見直したり、他の人が使おうとすると、理解できず結局ゼロからやり直しといった経験をお持ちの方もいるのではないでしょうか。

 複雑な関数IFの構造をもっとシンプルにしたいという方に、特定パターンにおいて関数LOOKUPで置き換える方法について、事例を交えて説明します。

本記事の内容
  • 関数IFの「ネスト」と問題点
  • 関数LOOKUPの基本構造
  • 関数IF→LOOKUPへの置き換え

 エクセルを使ってデータ処理などを行う場合は、関数IFを使う場面が多々あります。(関数IFの論理式について詳しくはこちらです)

 簡単な論理式で複雑な処理ができるので、とても便利です。さらに、コピー&ペーストを併用することで、何万のデータ処理が一気に完了します。

 しかし、便利が故についつい色々な条件を論理式に反映していってしまい、いつの間にかとても長い論理式ができあがってしまうことがよくあります。

 使用するのが一回限りであればよいですが、後日見直しや改良したり、他の人が活用しようとした際に、構造が複雑すぎて理解できないのは問題です。

 同じ処理を実行するのであれば、なるべくシンプルな構造で実現し、「後から見てもわかりやすい」方法を考えます。

 関数にも得意・不得意があるので、活用可能なパターンを事例として整理したうえで、実際の活用につなげていただけるように説明します。

スポンサーリンク

関数IFの論理式が複雑になる原因

複雑な式、論理式のイメージ

「なぜ、論理式が複雑になるか?」関数IFのネスト

 論理式を複雑にする原因の一つとして、関数IFのネストが考えられます。

 ネストは、簡単に言うと「IFの中に、また関数を入れていく」ということだと考えてもらえればよいかと思います。

 必然的にIFの中に関数がいくつも重なり合っていくことになります。IFにネストできる関数が64とかなり多いので、ネストの繰り返しによって論理式が複雑になっていきます

 例えばよくある事例ですが、テストの点数と点数に応じた評価をIFを使って自動出力するというものがあります。

 評価区分が増えれば増えるほど、ネストが増えていき複雑になっていきます。以下、実際に作成してみます。

事例|関数IFのネストが増える

 IFを使い、点数と点数に対応した評価を自動出力させる論理式を考えました。

 評価区分を増やすと、どんどんネストが増えていく様子が確認できます

 評価区分が「優、良、可、不可」4段階評価の場合、IF内の論理式は3つです。

関数ifの事例、ネスト少ないイメージ
4段階評価

 次に評価区分を「1~10」10段階評価とすると、IF内の論理式は9つです。

関数ifの事例、ネスト多いイメージ
10段階評価

 このように、論理式の数は評価区分に比例して増加していってしまいます。さらに、関数IF内の文字数を比較すると、4段階:48文字→10段階:146文字と3倍以上に増えてしまっています。

 文字数が加速度的に増えてしまっています。ネストが増えることによって、論理式が複雑化していくプロセスが確認できると思います。

IFの代わりにLOOKUPを使ってシンプルにする

 複雑化した論理式を抱えた関数IFを、LOOKUPに置き換えることでシンプルにします。

関数LOOKUP|基本とシンプル化活用方法

 関数LOOKUPは検索・行列関数に分類されます。ベクトル形式と配列形式が存在しますが、いずれでも対応できますので、それぞれ先ほどの10段階評価を事例に説明します。

LOOKUP:ベクトル形式

 ベクトル形式については、以下のように定義されます。

LOOKUP ベクトル形式

(検査値,検査範囲,[対応範囲])

 検査値で対象となる点数を、検査範囲で評価区分を、対応範囲で評価を指定することで、評価の自動出力を得ることができます。

 ただし、検査範囲は必ず昇順で並べておく必要があります。(降順で並べると正しい結果が得られません)

 LOOKUPのベクトル形式を用いて、10段階評価を構成してみます。

lookupベクトル形式を用いたシンプル化
LOOKUPベクトル形式による10段階評価

 IFを用いた場合と同じ結果を得ることができました。

 IFと比較すると、文字数は146文字→24文字と85%も短くすることができましたLOOKUPのベクトル形式を用いることで、シンプル化を図ることができました

LOOKUP:配列形式

 配列形式については、以下のように定義されます。

LOOKUP 配列形式

(検査値,配列)

 先ほどの検査範囲、対応範囲の部分が配列に置き換わっているイメージです。

 ただし、配列形式に関してはMicrosoftのサポートページにおいて、VLOOKUPもしくはHLOOKUPの使用が強く推奨されています。また、ベクトル形式同様、昇順で並べておいてください。

 LOOKUPの配列形式を用いて、10段階評価を構成してみます。

lookup配列形式を用いたシンプル化
LOOKUP配列形式による10段階評価

 こちらもIFと同じ結果を得ることができました。

 IFと比較すると、ベクトル形式よりもさらに文字数削減が進み、146文字→14文字と90%以上も短くすることができました。配列形式でも、シンプル化を図ることができました。

関数LOOKUPでの置き換えが有効なパターン

 いくつかの範囲や区間設定の中で、特定の数値を算出するような状況においては、LOOKUPでの置き換えが有効に機能します。

 「検査範囲」の部分(または「配列」の部分)で、IFのネストにて設定している条件分岐を一括で処理しているからです。

 例えば、走行距離とタクシー料金のような関係を考えるとき、IFを用いると走行距離と料金の規定を一つひとつ考えるのではないでしょうか。1kmから2kmが500円、2kmから2.5kmが550円とかです。しかし、LOOKUPでは検査範囲で一括で指定できるので、シンプルに実現できるということです。

 パターンを見極め、適切な関数を用いることでシンプルな構成にすることできます

 ここまでシンプル化できていれば、後日見直し・改定を行う際や、他の人が扱う際にも「複雑すぎてわからない・・・」ということはないはずです

まとめ

 「どうしても関数IFの論理式が長くなってしまう、複雑すぎてわからなくなる」という問題に対して、関数LOOKUPを用いたシンプル化をまとめました。

 特定範囲での特定数値の出力に関しては、LOOKUPでの置き換えが有効に機能し、後から見てもわかりやすい構造を実現できます。

  • 関数IFは関数のネストが可能なため、論理式が長くなる一つの原因となる
  • LOOKUPはベクトルと配列形式があり、昇順データに対し検索・行列関数として機能する
  • 適切なパターンでIF→LOOKUPに置き換えると、80~90%程度論理式を短くできる

 「後から見てもわかりやすい」は大切ですね。ぜひ一度試してみてください。

 当ブログでは実際の仕事での経験を通して、役立つノウハウの蓄積を図っています。お時間があれば以下のリンクより、色々な記事を読んでいただければと思います。

 ここまで読んでいただき、ありがとうございました。

読んで頂き有難うございました

コメント

タイトルとURLをコピーしました