
目次
FILTER関数 Excelで『商品ごとにデータを並べたい』完成図
B列にある商品Aと商品Bを自動的にそれぞれ別々に表示し合計を表示させたい。(あとから追加しても勝手に表示と合計をカウントしてくれるように)
FILTER関数とは
大量のデータを任意に抽出してデータを表示したい際、多くの人はフィルターを使って表示すると思います。
これと同じ機能をもったのがFilter関数です。そのまま読んで字のごとくなんですが、関数ならではの手軽さと効率性があります。
この関数は大量にあるデータ(今回の場合B列)の中から指定したデータの行を一気に持ってくる事もできるし、
また自動的(あとからデータを追加しても勝手にデータを拾ってくる)に対応もします。
VLookup関数でも似たようなことができますが、こちらは静的にしか機能せず追加のデータに応じてその都度、数式を追加しなければなりません。
しかし欠点があり、Filter関数は割と最近誕生したものでExcel 2019 以前のバージョンにおいてはこの関数が使えず、せっかくやりたい事がおススメ関数で紹介されているのに手持ちのExcelのバージョンが低くて使えないという人もいます。
今回は、2019以前のエクセルの方とそれ以降のバージョンを使っている人にも紹介できるようにどちらの方法も併せて解説させていただきます。
「商品A」「商品B」のそれぞれの個数と値段を1行づつ表示させたい
B列に商品名を並べ、C列に値段。
これを「商品A」「商品B」のそれぞれの個数と値段を1行づつ表示させたい。
作中のExcelは左側(D~G列)は数式を使って行っています。右側(I~L列)はFILTER関数を使って行っています。
Filter関数の説明
=FILTER(B3:C32,B3:B32="商品A")
=FILTER(B3:C32,B3:B32="商品B")
上記のコードを入れると自動でデータのある限り下までデータが勝手に表示して並べ替えられます。(バージョンによって挙動が違う可能性あり。 今回はExcelのVerはProPlus2021)
=FILTER(範囲,条件,一致しない場合の値) という数式で至極簡単。(一致しない場合の値は省略してもOKです)
範囲:B3:C32
条件:B3:B32="商品A"
範囲は抽出するデータを選択 条件は抽出する条件を指定
条件の記述が少し特殊ですが、これはそういう仕様なのでロジックまでは覚えなくてよいと思います。また条件には不等号や条件式で更に細かく記述する事が可能です。(別の記事にて紹介)
数式を複数組み合わせて抽出(Filter関数を使えないバージョンの人用)
FILTER関数が使えない人はこちらの複合数式で組み合わせたものを。
=IFERROR(
INDEX($C:$C, SMALL(IF($B:$B=$D$3, ROW($B:$B)), ROWS(E$3:E3))),
IF(COUNTA(E2:E$3)>0, "ありません", "")
)
以下E32セルまでドラッグしてコードをコピー
=IFERROR(
INDEX($C:$C, SMALL(IF($B:$B=$F$3, ROW($B:$B)), ROWS(G$3:G3))),
IF(COUNTA(G2:G$3)>0, "ありません", "")
)
以下G32セルまでドラッグしてコードをコピー
上記の「FILTER関数」と「数式を複数組み合わせて抽出」はほぼ同じ挙動をしますが、FILTER関数が使えるバージョンでしたらこれ一択でよいと思います。
(複数数式の解説は割愛します)
ちなみちアクセスで同じことをすると・・・
FILTER関数は アクセスでいうクエリ(抽出命令文)と同じような性質を持っています。いままでのExcelの関数とはちょっと異質な関数です。
アクセスでできる事をエクセルに持ってきたという感じでしょうか。
まとめ
いかがだったでしょうか。
FILTER関数は日常使いの人やビジネス場面でも威力を発揮する実用性のある関数です。
使える人は会社でも重宝されることは間違いないでしょう。実はこれ、会社で作ってくれと頼まれたことがあります。Filter関数が当時なく一週間ぐらいかけて作ったのですが、
業務時間を削ってやっとこさえた記憶があります。今はFilter関数があるので秒でできますが、当時は非常に苦労して作ったものです・・。
個人で使うにしてもこれ一本で何時間も効率的になる実用系の関数ですのでぜひ使いこなしてください。