ADVERTISEMENT

【Googleスプレッドシート】FILTER関数でデータ絞り込み!条件指定で別シートに展開

【Googleスプレッドシート】FILTER関数でデータ絞り込み!条件指定で別シートに展開
🛡️ 超解決

Googleスプレッドシートで大量のデータから特定の条件に合う行だけを抽出したいことはありませんか。FILTER関数を使えば、数式だけで簡単にデータを絞り込むことができます。この関数は他の関数と組み合わせることで、別シートに条件に合ったデータだけを自動で展開することも可能です。この記事では、FILTER関数の基本的な使い方から、複数条件の指定、別シートへの出力方法までを解説します。

【要点】FILTER関数で条件に合ったデータを別シートに展開する3つのポイント

  • =FILTER(範囲, 条件1, [条件2, …]): 第1引数に抽出したい範囲、第2引数以降に条件を指定します。条件はTRUE/FALSEの配列で指定します。
  • 複数条件の指定: 条件を*(乗算)で組み合わせるとAND条件、+(加算)でOR条件になります。例えば(A:A=”東京”)*(B:B>100)で東京かつ100超の行を抽出します。
  • 別シートに展開: 抽出結果を別シートに表示するには、別シートのセルにFILTER関数を入力します。参照元シートの更新に自動で追従します。

ADVERTISEMENT

FILTER関数の基本構文とできること

FILTER関数は、指定した条件に基づいて配列または範囲からデータを抽出する関数です。構文は「=FILTER(範囲, 条件1, [条件2, …])」です。第1引数に抽出したいデータの範囲、第2引数以降に条件式をTRUE/FALSEの配列で指定します。条件は複数指定でき、AND条件やOR条件で組み合わせることができます。この関数は動的配列を返すため、結果は自動的に周囲のセルにあふれて表示されます。条件に合う行がない場合はエラー(#N/A)が返りますが、後述するIFERROR関数と組み合わせて対処できます。

FILTER関数の大きな利点は、元のデータを変更せずに抽出できる点です。また、抽出結果は元のデータと連動して更新されます。例えば、元のデータに新しい行を追加すると、FILTER関数の結果にも自動的に反映されます。このため、データの管理が非常に楽になります。

FILTER関数で別シートにデータを展開する手順

ここでは、FILTER関数を使って別シートに条件に合ったデータを展開する具体的な手順を説明します。シート1に元データがあり、シート2に抽出結果を表示する例で進めます。

基本的なFILTER関数の入力方法

  1. 抽出結果を表示するセルを選択する
    シート2のA1セルなど、結果を表示したいセルをクリックします。このセルが抽出結果の左上になります。
  2. FILTER関数を入力する
    「=FILTER(」と入力し、第1引数に抽出元のデータ範囲を指定します。例えばシート1のA1:D100なら「Sheet1!A1:D100」と入力します。シート名にスペースが含まれる場合は「’シート名’!A1:D100」のようにシングルクォーテーションで囲みます。
  3. 条件を指定する
    第2引数に条件式を書きます。例えば、A列が「東京」の行だけ抽出したい場合、「Sheet1!A1:A100=”東京”」と入力します。複数条件の場合は続けて指定します。関数全体は「=FILTER(Sheet1!A1:D100, Sheet1!A1:A100=”東京”)」となります。
  4. 関数を確定する
    Enterキーで確定すると、条件に合ったデータがA1セルから自動的に表示されます。結果が複数行ある場合は下の行にあふれて表示されます。

複数条件を指定する方法

  1. AND条件(すべての条件を満たす)
    条件式を*(アスタリスク)でつなぎます。例:A列が「東京」かつB列が100より大きい行を抽出する場合、「=FILTER(Sheet1!A1:D100, (Sheet1!A1:A100=”東京”)*(Sheet1!B1:B100>100))」と入力します。
  2. OR条件(いずれかの条件を満たす)
    条件式を+(プラス)でつなぎます。例:A列が「東京」または「大阪」の行を抽出する場合、「=FILTER(Sheet1!A1:D100, (Sheet1!A1:A100=”東京”)+(Sheet1!A1:A100=”大阪”))」と入力します。
  3. ANDとORの混合
    括弧を使って優先順位を明確にします。例:(A列が東京かつB列が100超)またはC列が「完了」の場合、「=FILTER(Sheet1!A1:D100, ((Sheet1!A1:A100=”東京”)*(Sheet1!B1:B100>100))+(Sheet1!C1:C100=”完了”))」となります。

条件に合うデータがない場合のエラー対策

  1. IFERROR関数でラップする
    条件に合うデータが存在しない場合、FILTER関数は「#N/A」エラーを返します。これを回避するには、IFERROR関数で囲みます。例:「=IFERROR(FILTER(Sheet1!A1:D100, Sheet1!A1:A100=”東京”), “該当データなし”)」と入力します。これで、該当データがない場合に「該当データなし」と表示されます。
  2. 空白を表示したい場合
    空白にしたい場合は、IFERRORの第2引数を空文字「””」にします。「=IFERROR(FILTER(…), “”)」と入力すると、エラーの代わりに空白が表示されます。

FILTER関数使用時の注意点とトラブル対策

FILTER関数は便利ですが、いくつかの注意点があります。ここではよくあるトラブルとその対処法を紹介します。

範囲のサイズが一致しない場合のエラー

FILTER関数の第1引数(抽出範囲)と第2引数以降の条件範囲は、行数が同じである必要があります。例えば、抽出範囲がA1:D100(100行)なのに、条件範囲をA1:A50(50行)とするとエラーになります。必ず行数を一致させてください。列数は異なっていても構いませんが、条件範囲は抽出範囲の対応する列である必要はありません。条件で使用する列の範囲を正確に指定しましょう。

空白セルを含むデータの扱い

条件式で空白セルを判定する場合、空白は「””」と比較します。例えば、B列が空白の行を抽出するには「Sheet1!B1:B100=””」と指定します。逆に空白でない行を抽出するには「Sheet1!B1:B100<>“”」とします。注意点として、空白セルを含む範囲で条件式を書くときは、数式の結果が意図しないものにならないか確認してください。

配列のあふれに関する注意

FILTER関数の結果は、動的配列として隣接するセルにあふれて表示されます。あふれ先に既にデータが存在すると、#SPILL!エラーが発生します。この場合は、あふれ先のセルを空にするか、FILTER関数の結果を別の場所に移動してください。また、結果のサイズが大きすぎるとスプレッドシートのパフォーマンスに影響することがあります。必要な範囲だけを指定するようにしましょう。

他の関数と組み合わせる際の注意

FILTER関数の結果を他の関数の引数として使用する場合、結果が配列であることを考慮する必要があります。例えば、結果の合計を求めるには、SUM関数でラップします。「=SUM(FILTER(Sheet1!B1:B100, Sheet1!A1:A100=”東京”))」で東京の行のB列合計を計算できます。また、UNIQUE関数と組み合わせて重複を排除することも可能です。

ADVERTISEMENT

FILTER関数とQUERY関数の比較

FILTER関数とQUERY関数はどちらもデータ抽出に使われますが、特徴が異なります。以下の表で比較します。

項目 FILTER関数 QUERY関数
構文 シンプルで直感的 SQLライクな構文が必要
条件指定 セル参照や数式で柔軟 テキスト文字列で指定
複合条件 ANDは*、ORは+で表現 WHERE句でAND/ORを記述
並べ替え 別途SORT関数が必要 ORDER BY句で可能
グループ化 別途関数が必要 GROUP BY句で可能
データ範囲 同一スプレッドシート内 別スプレッドシートも参照可能(IMPORTRANGEと併用)
エラー処理 IFERRORで対応 IFERRORで対応可能だが構文に注意

簡単な条件で抽出するならFILTER関数が便利ですが、並べ替えやグループ化が必要な場合はQUERY関数が適しています。目的に応じて使い分けましょう。

まとめ

この記事では、FILTER関数を使ってデータを絞り込み、別シートに展開する方法を解説しました。FILTER関数は直感的で使いやすく、複数条件も簡単に指定できます。他の関数と組み合わせれば、さらに柔軟なデータ加工が可能です。次はQUERY関数やARRAYFORMULA関数も学んで、スプレッドシートのデータ処理を効率化してみてください。また、IFERROR関数を使ってエラーを回避するテクニックも覚えておくと便利です。ぜひ日々の業務で活用してください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。