Excel2016やoffice365 Pro Plusで使える関数で、FILTER関数というものです。
選択範囲内で検索値が重複してある場合、VLOOKUPでは検索した一番最初の結果しか返してくれませんので、2個目以降の値を返してくることができません。
今までは配列関数を使って「VLOOKUPではできない、検索値が範囲内で重複している場合」のように複雑でしたが、FILTER関数を使えば非常に簡単に抽出できるようになりました。
フィルター機能で抽出するような感じで取り出すことができます。
例えば以下のように表があります。
この中で「りんご」の販売日を抽出したいのですが、「りんご」は複数ありますのでVLOOKUPでは抽出することができません。
そこでFILTER関数を使います。
式は以下のようになります。
=FILTER(A2:B31,A2:A31="りんご","")
関数の引数ダイアログだと下図のようになります。
ひとつめに指定したセル範囲「配列」は、検索値を含む列から取り出したい値が入っている列までを選択します、今回の場合は2列だけなので表全体を選択しています。
ふたつめに指定したセル範囲「含む」は、検索値を含む列を指定して「=」で何を検索したいか指定しています。
みっつめの「空の場合」には検索するものがない時に返す値です、今回は「""」で結果は空白にしておくように指定しています。
セル範囲を絶対参照にしてないことにお気づきでしょうか。
Excel2016以降は「スピル」という機能が追加されました。
詳しい説明は省きますが、配列で数式を1つ目のセルに入れると自動的に他のセルにも結果が表示されます。
これまではオートフィルコピーなどを使って式をコピーしていましたが、これをしなくても良いので絶対参照にする必要もなくなりました。
結果は以下のようになりました。
数式を入れたのはE列の一番上のセルだけです、残りはスピル機能で自動的に表示されました。
【SORT関数】
上記のようにデータを取り出したときに、すべて昇順降順になっているわけではないと思います。
データを抽出したついでに自動的に並べ替えされたら楽ですね。
以下のように式を追加すればそれも可能です。
=SORT(FILTER(A2:B40,A2:A40="りんご",""),2,-1)
FILTER関数は上記のものをそのまま使用してます。
そのFILTERの前にSORT関数を付けて、式後部の「2」は並べ替え基準の列を指定します、つまり日付の列なので左から数えて2列目なので「2」を指定しています。
式の末尾にある「-1」は降順を指定しています、昇順の場合は「1」を指定します。
こうすると後からデータを追加していっても、抽出結果のセルは自動的に並べ替えされます。
後からデータの並べ替えをする必要がありませんので、非常に便利です。
結果は以下のようになりました。
「-1」を指定したので降順の結果になっています。