やりたかった事
シートAにある表から、条件にあったデータが存在する行の、特定の範囲のデータを表示させたい。
その後、下方向へオートフィルして、シートBの表に、存在する個数分表示させたい。
なおシートAのデータは更新する度に変わる。
Story
ある時、Excelでとある表を作成していました。
そこで、上記のやりたかった事に直面しました。
初めに思い浮かんだのは、VLOOKUP、INDEX、MATCHこのあたりでした。
確かに実装できそうな気がします。
「VLOOKUP」...今回の条件下では、最初の値しか取ってこないし、シートAのデータが更新されるので無理。
「INDEX,MATCH」...できるけども、多少複雑な数式になる。メンテナンスもしづらい。
「INDEX,MATCH」で実装するかぁ~?と思っていながら調べた所、「FILTER」という関数がある事を知りました。
早速使ってみよう!と思って=FILTER
とすると、予測変換に出てきません。
さらに調べると...Excel2021からじゃないですか!!!!拙者Excel2019で絶望しました。
別に2019を使う必要性もなかったので、早速バージョンを変えて、FILTER関数を使いました。
とても短い数式で、こんな事ができるなんて!!感動しました。
これだけに飽き足らず、他者の話では、レスポンスもとっても早いとのこと。(確証もないし調べてもないです)
この関数は便利かつ最強なんだな..。と思いました。
INDEX,MATCHとFILTERの差
シートBのセルA3にいれる事を想定しています。
INDEX,MATCHの場合
なんとか考えたのですが、どうもうまく出来ず挫折しました。。
章を作っておいて申し訳有りません...
コメントお待ちしております...
FILTERの場合
=FILTER(シートA!A2:D12,シートA!A2:A12=シートB!A1,"")
まとめと雑記
以上、FILTER関数を取り上げさせて頂きました。
8割完成して、下書きで置いていたので、いい加減投稿しようと思い、更新しました。
もし、同じような境遇に出会った方は、本記事でFILTERを使ってみて頂けると光栄です。
もっと、「効率的なやり方がある!!」という方は是非教えて頂けますと嬉しいです!
本記事が参考になったり、興味あるという方は、いいねをお願い致します!
更新のモチベとして、大変糧になります!ありがとうごいました!
■付録■
書式/基本構文
=FILTER(配列,含む,[空の場合])
第一引数 :配列
一言でわかりやすく言うと、出力する範囲です。
Yさん「列Aから列Cを出したいからA1:C10まで指定しよっと!」
=FILTER(A1:C10,含む)
第二引数 :含む
一言でわかりやすく言うと、フィルターしたい条件です。
Yさん「B列にある[りんご]がある範囲を取得したいから...B1:B10="りんご"を指定しよっと!」
=FILTER(A1:C10,B1:B10="りんご")
第三引数 :[空の場合] ※任意
一言でわかりやすく言うと、フィルター条件に1つも一致しない場合の処理を記載します。
Yさん「もし、フィルターした時、データが1つもなかったらエラーが出ちゃうから、その場合は、対象なしを出力しよっと!」
=FILTER(A1:C10,B1:B10="りんご","対象なし")
第三引数は必須項目ではありません。省略が可能です。
指定しない場合に発生すると#CALC!
が返却されます。
Excel2021以降のバージョンから本関数は利用が可能です。