複数条件で検索して一致するデータを抽出する方法

エクセル関数応用

データベースが2つ以上に分割されている場合、2つのデータベースを比較して必要な部分を検索して表示したい場合があります。1列だけの検索でデータが特定できれば簡単な話ですが、複数の条件でデータを検索しなければならない場合もあるでしょう。

本記事では、複数条件で検索する場合の数式を紹介します。

はじめに

技術的に大切なポイントは赤色のアンダーラインで、アイデアとして大切なポイントは黄色のアンダーラインで強調しています。また、関数の記述は黒いボックス内にあります。ポイントだけ読みたい方は活用してください。

完成形の概要

完成形の概要は下記のとおりです。一例として、仕入リストと売上リストという2つのデータベースがある場合を想定します。

仕入数量と売上数量が別のデータベースになっており、日々の仕入数量と売上数量の比較がしにくいデータベースになっています。そこで、売上リストのD列に仕入数量の列を設け、仕入リストから検索して数量を表示する数式を追加します。

仕入リストを商品名の「りんご」だけで検索すると、2行目と5行目に「りんご」が存在しているため、適切な結果を得られません。そこで、日付と商品名の2つの条件で検索して、求める結果を表示させます。

使用する機能は、関数と条件付き書式のみです。マクロは使用しません。

余談ですが、基本的な発想としては、仕入リストのD列に売上数量を入力してデータベースを一本化するほうが望ましいです。データベース自体を変更できるのであれば、一本化することを検討してみましょう。

2つの条件で検索できる数式

2つの条件で検索するには、INDEX関数とMATCH関数の2つを組み合わせて使用します。MATCH関数は1列だけでなく複数列の条件を指定できます。MATCH関数の「複数条件で検索できる機能」を利用して条件に一致するセルを見つけ出し、INDEX関数でそのセルの値を表示させるという仕組みです。

売上リストのセルD2の数式の記述は次のとおりです。

=INDEX(仕入リスト!$C:$C,MATCH(A2&B2,仕入リスト!$A:$A&仕入リスト!$B:$B,0))

最終的に表示させたいのは仕入リストのC列の値のため、INDEX関数の配列の引数には「仕入リスト!$C:$C」と記述します。

MATCH関数では、検査値としてA列の値とB列の値の2つをとるため、検査値の引数は「A2&B2」と記述します。検査値を増やしたい場合は、「&」でさらにつなげるだけです。

検査値が2つなので、検査範囲も2つ必要になります。それぞれ仕入リストのA列とB列を検査するので、「仕入リスト!$A:$A&仕入リスト!$B:$B」と記述します。こちらも検査値と同様に「&」でつないで増やすことが可能です。

おわりに

複数条件で検索して一致するデータを抽出する方法でした。

完成形の概要の項でも触れましたが、基本的にはデータベース自体を一本化するほうが管理しやすくなるので、データベースの作り方はよく検討することをおすすめします。システムの都合などでデータベースが複数にわかれる場合は、データがひとつに特定されるような識別(伝票番号など)を付与するのもよいでしょう。

本記事の例でいえば、20230501のりんごであれば「20230501R」、20230501のみかんであれば「20230501M」といった固有のコードを双方のリストに付与すると、1列の検索だけでデータをひとつに特定できます。

参考にしてみてください。

コメント