Excelでのクロス表からのデータ検索、いわゆるクロス抽出についてです。XLOOKUP関数やINDEX/XMACTH関数による抽出が一般的ですが、ここではFILTER関数を使った方法を試してみます。
- FILTER関数をネストすることでクロス抽出をすることができます。
手順
B2:E6の範囲がクロス表になっています(価格表)。
G列以降が検索部分になっており、G3セルに入力されたメニューとH3セルに入力されたサイズから価格を検索します。
そこで、J3セルに次のような式を入力して価格を求めています。
J3セル
=FILTER(FILTER(B2:E6,B2:B6=G3),B2:E2=H3)
FILTER関数をネストしています。
まず内側の「FILTER(B2:E6,B2:B6=G3)」により「{"ココア",360,400,440}」の行が抽出されています。
そしてさらに外側のFILTER関数によりサイズ「M」に対応する「400」が抽出されています。
内側のFILTER関数の結果により最上段の見出し行(サイズの行)が消えてしまうのでそこから先の抽出ができないようにも思えますが、そもそもFILTER関数において抽出対象(価格)の範囲(C3:E6)に検索値(「ココア」や「M」)を含んでいる必要はないのでこれでうまくいきます。
FILTER関数を使って列方向の抽出できるというのもポイントです。
FILTER関数では抽出対象データ(価格)と検索値(メニューやサイズ)の引数範囲は重複しなくてもよいので、3つの参照範囲はさらに縮めることができます。よって次のようにしてもOKです。
J3セル
=FILTER(FILTER(C3:E6,B3:B6=G3),C2:E2=H3)
ところで関数のネストではなくAND検索で抽出できれば万々歳なのですが、これはうまくいきません。エラーになります。