【Excel 関数】FILTER関数で「条件に合う行だけ抽出」— オートフィルターとの違いと使い分け

Excel
この記事は約8分で読めます。

この記事で分かること

  • 条件に合う行を別の場所に抜き出す FILTER 関数の書き方
  • オートフィルター(手動フィルター)と何が違うか
  • 複数条件の指定方法(AND・OR)
  • #CALC!・#SPILL! が出たときの直し方

条件に合う行を関数で抜き出すなら、FILTER 関数を使います。 元の表はそのままで、条件に合う行だけが数式のセルから下に並びます。

完成形。I1 で担当者を選ぶと、その人の行だけが I2 から下に並ぶ

この記事の最後で作る表です。I1 で選ぶ担当者を変えると、下の行も自動で入れ替わります。


どんな場面で使うか

  • 元データを変えずに、条件に合う行だけを別の場所に表示しておきたい
  • 「エリアが東京、かつ売上が5万以上」のような複数条件の結果を自動で更新したい
  • 条件を変えるたびにフィルターをかけ直す作業をやめたい
  • ドロップダウンで選んだ条件に合わせて、表示する行を切り替えたい

基本説明

使う元データ

この記事では、次の「売上データ」シートを使います。A〜G列に日付・担当者・エリア・商品名・カテゴリ・数量・売上金額が92行あります(画像は先頭の部分)。

元データ。「売上データ」シートの A〜G列

表はテーブルになっているので、見出しにフィルターボタンが出ています。同じ表はサンプルファイル(記事末尾)で試せます。

FILTER の書き方

=FILTER(配列, 含む, [空の場合])
引数 意味
配列 抽出する元データの範囲
含む 条件。TRUE になった行だけが抽出される
空の場合 条件に合う行が1つもないときの表示(省略すると #CALC! エラー)

オートフィルターとの違い

オートフィルター(「データ」タブの「フィルター」)は、元の表の行を隠して見せる機能です。FILTER 関数は、条件に合う行を別の場所に書き出す関数です。

オートフィルター FILTER 関数
元データへの影響 行を隠す(元データはそのまま) 影響しない
条件変更 手動で再設定 セル参照を使えば自動更新
結果を別の場所に置く できない できる
複数シートで同じ条件を使う それぞれ設定が必要 数式をコピーするだけ
対応バージョン 全バージョン M365・Excel 2021以降

その場で目で確かめるだけならオートフィルター、抽出した結果を残して使い回すなら FILTER 関数が向いています。


手順

1. 担当者が「田中」の行だけを抜き出す

  1. I列の列番号をクリックして、列全体を選ぶ
  2. 「ホーム」タブの表示形式の一覧から「短い日付形式」を選ぶ
  3. I2 セルを選び、次の数式を入力して Enter キーを押す
=FILTER(A2:G100, B2:B100="田中", "該当なし")

B列が「田中」の行だけが I2 から下に並んだ結果

B列が「田中」の22行が、A〜G列と同じ並びで表示されます。

数式が入っているのは I2 だけです。I3 から下は、結果に合わせて自動で広がった部分(スピル)です。1〜2で I列を日付の形式にしておくのは、結果の日付が数値で表示されるのを防ぐためです。

2. 複数の条件で絞り込む(AND)

「エリアが東京」かつ「売上金額が5万以上」の行を抜き出します。I2 の数式を次のように書き換えます。

=FILTER(A2:G100, (C2:C100="東京") * (G2:G100 >= 50000), "該当なし")

エリアが東京かつ売上金額が5万以上の行を抜き出した結果

両方の条件を満たす15行が表示されます。

条件をそれぞれ ( ) で囲み、* でつなぐと「かつ」になります。両方が TRUE(=1)の行だけが、掛けた結果も1になるからです。

3. どれか1つに合えば抜き出す(OR)

「エリアが東京」または「エリアが大阪」の行を抜き出します。

=FILTER(A2:G100, (C2:C100="東京") + (C2:C100="大阪"), "該当なし")

エリアが東京または大阪の行を抜き出した結果

東京と大阪の56行が表示されます(画像は先頭の部分)。

+ でつなぐと「または」になります。どちらか1つでも TRUE なら、足した結果が1以上になるからです。


サンプル例

ドロップダウンで担当者を切り替える(冒頭の完成形)

  1. I1 セルを選ぶ
  2. 「データ」タブの「データの入力規則」を選ぶ
  3. 「入力値の種類」で「リスト」を選ぶ
  4. 「元の値」に 田中,佐藤,鈴木,山田,伊藤 と入力し、「OK」を押す

データの入力規則で I1 にリストを設定したところ

I1 の右に出る ▼ から担当者を1人選びます。続けて、I2 の数式を次のように書き換えます。

=FILTER(A2:G100, B2:B100=I1, "データなし")

I1 で鈴木を選んだときの抽出結果

I1 で「鈴木」を選ぶと、鈴木さんの18行に切り替わります。

抽出結果を売上金額の大きい順に並べる(SORT)

=SORT(FILTER(A2:G100, C2:C100="東京", "該当なし"), 7, -1)

東京の行を売上金額の大きい順に並べた結果

東京の36行が、売上金額の大きい順に並びます(画像は先頭の部分)。

7 は抽出結果の7列目(売上金額)、-1 は大きい順(降順)という意味です。

必要な列だけを抜き出す(CHOOSECOLS)

担当者(2列目)と売上金額(7列目)だけにしたいときは、CHOOSECOLS 関数で列を選んでから FILTER に渡します(Microsoft 365・Excel 2024 以降)。

=FILTER(CHOOSECOLS(A2:G100, 2, 7), C2:C100="東京", "該当なし")

東京の行の担当者と売上金額の2列だけを抜き出した結果

東京の36行について、担当者と売上金額の2列だけが表示されます。

隣り合った列だけなら、第1引数を B2:C100 のように狭めるだけで済みます。


よくあるエラー

#CALC! と表示される

原因: 条件に合う行が1つもなく、第3引数(空の場合)を省略している。

直し方: 第3引数を必ず指定する。

=FILTER(A2:G100, C2:C100="東京", "該当データなし")

#SPILL! と表示される

原因: 結果が広がる先のセルに、値が入っている。下の画像では K5 に値があるため、I2 が #スピル! になっています(日本語版の Excel では #スピル!、英語版では #SPILL! と表示されます)。

K5 に値があるため I2 が SPILL エラーになった状態

直し方: 結果が広がる先のセルを空にする。

AND 条件で結果が出ない

原因: 条件を ( ) で囲んでいない。演算子の優先順位の関係で、意図しない計算になることがあります。

誤り例:

=FILTER(A2:G100, C2:C100="東京" * G2:G100 >= 50000, "")  ← 括弧なし

直し方: 条件は1つずつ ( ) で囲む。

=FILTER(A2:G100, (C2:C100="東京") * (G2:G100 >= 50000), "")

日付が5桁の数値で表示される

原因: 結果のセルに日付の表示形式が付いていない。

直し方: 手順1の1〜2のとおり、I列を「短い日付形式」にする。列幅が狭くて #### になったら、I列とJ列の境界をダブルクリックして広げます。


まとめ

  • 条件に合う行を関数で抜き出すなら FILTER 関数。元データを変えずに、別の場所へ結果を並べられる
  • AND 条件は *、OR 条件は + でつなぎ、条件はそれぞれ ( ) で囲む
  • 第3引数(空の場合)を指定しておくと #CALC! エラーを防げる
  • SORT で並べ替え、CHOOSECOLS で列の絞り込みまで、1つの数式で済ませられる

ドロップダウンと組み合わせると、選んだ条件に合わせて行が入れ替わる表が作れます。手動のフィルターをかけ直す作業を、まずは1つ置き換えてみてください。


対応バージョン: Microsoft 365 または Excel 2021 以降(CHOOSECOLS を使う例だけ Excel 2024 以降)


関連記事

サンプルファイル

記事中で使用しているサンプルデータはこちらからダウンロードできます。

タイトルとURLをコピーしました