(Gスプレッドシート)FILTER関数を使ってクロス表から検索する

 Googleスプレッドシートでのクロス表からの値の検索についてです。INDEX/MATCH関数を使うのが定石ですが、ここではFILTER関数を使った方法を試してみます。

  • FILTER関数を2重にネストすることでクロス表から値を取得することができます。

手順

 B2:E6の範囲がクロス表になっています(メニューの価格表)。
 G3セルに次のような式を入力することで、「海鮮丼」の「竹」の値段を求めています。

 G3セル

=FILTER(FILTER(B2:E6,B2:B6="海鮮丼"),B2:E2="竹")

 まず内側の「FILTER(B2:E6,B2:B6="海鮮丼")」により「{"海鮮丼",2400,2000,1600}」という配列が得られます。
 この段階で最上段の見出し列が失われるので詰んでしまうような気もしますが、さらにFILTER関数を重ねて「B2:E2="竹"」という条件を付ければ無事に2000という値が抽出されます。FILTER関数では取得対象({"海鮮丼",2400,2000,1600})が検索値(竹)を含んでいる必要はない、というのがポイントです。


 よって3か所の参照先については範囲を縮小することができ、このようにしてもOKです。
 むしろ厳格にはこちらが正解でしょうけども、直観的に上記の式の方がわかりやすいかとは思います。

 G3セル

=FILTER(FILTER(C3:E6,B3:B6="海鮮丼"),C2:E2="竹")

 なおINDEX/MATCHと異なり複数の値を取得する可能性がありますが、最も左上のマッチを取得したい場合はさらにINDEX関数で囲んで「INDEX(~,1,1)」とします。


 ちなみに、単純にAND検索でいければ大変便利なのですが、これはうまくいかずエラーになります。
 もちろん*演算子を使っても同じです。

 G3セル(エラー)

=FILTER(B2:E6,B2:B6="海鮮丼",B2:E2="竹")