Excel FILTER関数 - 数式を使った動的なフィルタリング

  • これを共有
Michael Brown

このクイックレッスンでは、Excelで数式を使って動的にフィルタリングする方法を学びます。 複製、特定のテキストを含むセル、複数の条件でのフィルタリングなどの例を紹介します。

Excelでは通常、どのようにフィルタリングを行っていますか? ほとんどの場合、オートフィルタ、より複雑なシナリオではアドバンストフィルタを使用しています。 これらの方法は高速で強力ですが、1つの大きな欠点があります。データが変更されると自動的に更新されないため、クリーンアップして再度フィルタする必要があります。 Excel 365のFILTER関数導入は、次の代替手段として待望されているものです。Excelの数式は、ワークシートを変更するたびに自動的に再計算されるので、フィルタの設定は1回で済みます。

    エクセルFILTER関数

    ExcelのFILTER関数は、指定した条件に基づいてデータの範囲をフィルタリングするために使用します。

    この関数は、動的配列関数のカテゴリに属し、数式を入力したセルから始まるセル範囲に自動的に値がこぼれる配列になります。

    FILTER関数のシンタックスは以下のとおりです。

    FILTER(配列、include、[if_empty])

    どこで

    • アレイ (必須) - フィルターにかけたい値の範囲または配列。
    • 含まれる (必須) - ブール配列として提供される基準 (TRUE と FALSE の値)。

      その高さ(データが列の場合)または幅(データが行の場合)は、その高さが 勢揃い の議論になります。

    • If_empty (オプション) - 基準を満たすエントリーがない場合に返す値です。

    FILTER機能は、Excel for Microsoft 365およびExcel 2021でのみ利用可能です。 Excel 2019、Excel 2016およびそれ以前のバージョンでは、サポートされていません。

    ExcelのFILTERの基本的な計算式

    まず、データをフィルタリングするためのExcelの数式がどのように機能するかを理解するために、いくつかの非常に簡単なケースを説明します。

    以下のデータセットから、特定の値を持つレコードを抽出するとします。 グループ を、B2:B13="C" という式で指定することで、グループCを実現することができます。 含む 引数を指定すると、TRUE が "C" 値に対応する必須のブール配列が生成されます。

    =FILTER(A2:C13, B2:B13="C", "検索結果なし")

    実際には、数式に直接値をハードコーディングするのではなく、F1などの別のセルに条件を入力し、セルリファレンスを使用する方が便利です。

    =FILTER(A2:C13, B2:B13=F1, "検索結果なし")

    この関数は、Excelのフィルタ機能とは異なり、元のデータには一切変更を加えず、数式を入力したセルから始まる、いわゆるスピルレンジ(下のスクリーンショットではE4:G7)にフィルタリングしたレコードを抽出します。

    指定した条件に一致するレコードがない場合、数式は if_empty 引数、この例では "No results "である。

    もし、あなたが へんじょう の場合、最後の引数に空文字列("")を指定します。

    =filter(a2:c13, b2:b13=f1, "")

    データが整理されている場合 よこに を左から右へ並べると、下のスクリーンショットのようにFILTER関数もうまく動作します。 ただ、FILTER関数に適切な範囲を定義してください。 勢揃い 含む 引数で、ソース配列とブール配列が同じ幅になるようにします。

    =FILTER(B2:M4, B3:M3= B7, "検索結果なし")

    ExcelのFILTER関数 - 使用上の注意

    Excelで数式を使ったフィルタリングを効果的に行うには、以下のような点に注意する必要があります。

    • FILTER関数は、元のデータがどのように構成されているかによって、自動的に結果をワークシートの縦または横にこぼします。 そのため、常に下と右に十分な空きセルがあるようにしてください。そうしないと、#SPILLエラーが表示されます。
    • ExcelのFILTER関数の結果は動的で、元のデータセットの値が変わると自動的に更新されます。 ただし、FILTER関数で指定された範囲は、元のデータセットの値とは異なります。 勢揃い 引数は、ソースデータに新しいエントリが追加されたときに更新されません。 勢揃い を自動的にリサイズし、Excelの表に変換して構造化された参照で数式を作成したり、動的な名前付き範囲を作成したりすることができます。

    Excelでフィルタをかける方法 - 計算式の例

    Excelの基本的なフィルタリングの仕組みがわかったところで、さらに複雑なタスクを解決するためにフィルタリングを拡張する方法について、少し考えてみたいと思います。

    複数条件でのフィルタリング(ANDロジック)

    複数の基準でデータをフィルタリングするには、2つ以上の論理式を 含む の議論になります。

    FILTER(配列, ( レンジ1 = クライテリア1 ) * ( レンジ2 = クライテリア2 ), "No results")

    乗算演算では,配列の処理に アンドロジック を満たすレコードのみを確保する。 全基準 が返されます。 技術的には、このように動作します。

    各論理式の結果は、TRUEを1、FALSEを0とするブール値の配列である。 次に、同じ位置にあるすべての配列の要素を掛け合わせる。 0を掛けると常に0になるので、すべての条件がTRUEである項目だけが結果の配列に入り、結果としてそれらの項目だけが抽出されることになる。

    以下の例は、この一般的な方式を実際に使用したものです。

    例1.Excelで複数の列をフィルタリングする

    Excelの基本的なFILTER式をもう少し拡張して、データを2つの列でフィルタリングしてみましょう。 グループ (B列)と ウィンズ (C列)。

    そのために、次のような条件を設定した。F2に対象グループの名前を入力する( クライテリア1 )、F3での最低必要勝利数( クライテリア2 ).

    我々のソースデータがA2:C13であることを考えると、( 勢揃い )、グループはB2:B13( レンジ1 )、優勝はC2:C13( レンジ2 ) の場合、このような式になる。

    =FILTER(A2:C13, (B2:B13=F2) * (C2:C13>=F3), "検索結果なし")

    その結果、グループAで2勝以上を確保した選手のリストが出来上がる。

    例2:日付間のデータをフィルタリングする

    まず最初に、Excelで日付でフィルタリングするための一般的な数式を作ることはできないことに注意してください。 特定の日付、月、または年によってフィルタリングするかどうかによって、異なる状況で、異なる基準を構築する必要があります。 この例の目的は、一般的なアプローチを示すことです。

    サンプルデータに、最後に勝った日の列をもう一つ追加します(列D)。 そして今度は、特定の期間、例えば5月17日から5月31日の間に起きた勝ちを抽出します。

    この場合、両方の基準が同じ範囲に適用されることに注意してください。

    =FILTER(A2:D13, (D2:D13>=G2) * (D2:D13<=G3), "検索結果なし")

    ここで、G2 と G3 は間のフィルタをかける日付である。

    複数条件でのフィルタリング(OR論理)

    複数の OR 条件でデータを抽出するには、前の例で示したような論理式も使用しますが、乗算するのではなく、加算します。 論理式が返す配列を合計すると、条件を満たさない (つまり、すべての条件が FALSE) 項目が 0 となり、その項目はフィルタリングで除外されます。 で除外した項目は、次のようになります。のうち、少なくとも1つの基準がTRUEであるものが抽出される。

    以下は、ORロジックでカラムをフィルタリングする汎用式です。

    FILTER(配列, ( レンジ1 = クライテリア1 ) + ( レンジ2 = クライテリア2 ), "No results")

    例として、以下のようなプレイヤーのリストを抽出してみましょう。 何だかんだで 勝利数

    元データがA2:C13、勝ち数がC2:C13、注目の勝ち数がF2とF3であるとすると、計算式は次のようになります。

    =FILTER(A2:C13, (C2:C13=F2) + (C2:C13=F3), "検索結果なし")

    その結果、どの選手が全勝で(4)、どの選手が未勝利で(0)、ということがわかる。

    複数のAND条件およびOR条件に基づくフィルタリング

    AND条件をアスタリスク(*)で、OR条件をプラス記号(+)で結合するのです。

    例えば、与えられた勝利数(F2)とE2またはE3のいずれかに含まれる選手のリストを返すには、次のような論理式の連鎖を構築します。

    =FILTER(A2:C13, (C2:C13=F2) * ((B2:B13=E2) + (B2:B13=E3)), "検索結果なし")

    そして、次のような結果を得ることができます。

    Excelで重複をフィルタリングする方法

    巨大なワークシートを扱うとき、あるいは異なるソースからのデータを組み合わせるとき、しばしば重複が潜んでいる可能性があります。

    をお探しの方。 洩れる スジ で、ユニークな項目を抽出し、上記リンク先のチュートリアルで説明されているUNIQUE関数を使用します。

    という目標がある場合 重複を避ける つまり、複数回出現するエントリーを抽出し、COUNTIFSと一緒にFILTER関数を使用します。

    このアイデアは、すべてのレコードの出現回数を取得し、1より大きいものを抽出することです。 クライテリア・レンジ / クライテリア このようなCOUNTIFSのペアがあります。

    フィルター( 勢揃い , COUNTIFS( カラム1 , column1です。 カラム2 , カラム2 )>1、"結果なし")

    例えば、A2:C20のデータから、3列すべての値に基づいて重複する行をフィルタリングする場合、以下のような数式を使用します。

    =FILTER(A2:C20, COUNTIFS(A2:A20, A2:A20, B2:B20, B2:B20, C2:C20, C2:C20)>1, "結果なし")

    ヒント. の値に基づいて重複をフィルタリングするには、次のようにします。 キーカラム の場合、COUNTIFS関数に特定の列のみを含めます。

    Excelで空白をフィルタリングする方法

    空白セルを除外する数式は、実はExcelのFILTER式に複数のAND条件をつけたものです。 この場合、すべての(または特定の)列にデータがあるかどうかを調べ、少なくとも一つのセルが空の行を除外します。 空白セル以外を特定するには、not equal toオペレータ()と空文字("")を使って、次のようにします。

    FILTER(配列, ( カラム1 "") * ( カラム2 =""), "結果なし")

    A2:C12のソースデータで、1つ以上の空白セルを含む行をフィルタリングするために、E3に次の数式を入力します。

    特定のテキストを含むセルをフィルタリングする

    特定のテキストを含むセルを抽出するには、FILTER 機能と古典的な If cell contains 式を組み合わせて使用します。

    FILTER(array, ISNUMBER(SEARCH(" テキスト ", レンジ )), "No results")

    その仕組みはこうだ。

    • SEARCH関数は、指定した範囲の文字列を探し、数値(最初の文字の位置)または#VALUE! エラー(文字が見つからない)を返します。
    • ISNUMBER関数は、すべての数値をTRUEに、エラーをFALSEに変換し、結果のブール型配列を 含む の引数を指定します。

    この例では ラストネーム の選手をB2:B13に、探したい名前の部分をG2に入力し、以下の式でデータをフィルタリングします。

    =FILTER(A2:D13, ISNUMBER(SEARCH(G2, B2:B13)), "検索結果なし")

    その結果、「韓」を含む2つの姓が検索される。

    フィルタリングと計算(Sum, Average, Min, Max, etc.)

    ExcelのFILTER関数は、条件を指定して値を抽出するだけでなく、フィルタリングしたデータを要約することもできます。 このため、FILTERとSUM、AVERAGE、COUNT、MAX、MINなどの集計関数を組み合わせます。

    例えば、F1で特定のグループのデータを集計する場合は、以下の計算式を使用します。

    通算勝利数

    =sum(filter(c2:c13, b2:b13=f1, 0))

    平均勝利数。

    =平均値(フィルター(c2:c13, b2:b13=f1, 0))

    最大勝利数。

    =max(filter(c2:c13, b2:b13=f1, 0))

    最低勝利数。

    =min(filter(c2:c13, b2:b13=f1, 0))

    すべての計算式で、"0 "を使っていることに注意してください。 if_empty 引数を指定すると、条件に合う値が見つからなければ数式は0を返します。 No results" などのテキストを指定すると、#VALUEエラーになり、これは明らかに最後の手段です :)

    大文字小文字を区別するFILTER式

    Excel の標準的な FILTER 計算式は、大文字と小文字を区別しません。 大文字と小文字を区別するには、EXACT 関数を 含む 大文字と小文字を区別して論理テストを行うようFILTERに強制します。

    FILTER(配列, EXACT( レンジ , クライテリア ), "No results")

    仮に、両方のグループがあるとすると A a で、グループが小文字の「a」であるレコードを抽出したい場合、以下の式を使用します。 A2:C13 はソースデータ、B2:B13 はフィルタリングするグループです。

    =FILTER(A2:C13, EXACT(B2:B13, "a"), "検索結果なし")

    いつものように、あらかじめ定義されたセル、たとえばF1に対象グループを入力し、ハードコードされたテキストではなく、そのセル参照を使用することができます。

    =FILTER(A2:C13, EXACT(B2:B13, F1), "検索結果なし")

    データをフィルタリングして特定のカラムだけを返す方法

    しかし、ソース・テーブルに数十から数百のカラムが含まれている場合、最も重要なカラムに結果を限定したいと思うかもしれません。

    例1.隣接するいくつかの列をフィルタリングする

    隣接するいくつかのカラムをFILTERの結果に表示させたい場合は、それらのカラムのみを 勢揃い なぜなら、どの列を返すかを決めるのはこの引数だからです。

    基本的なFILTER式の例で、最初の2列を返したい場合( 名称 グループ にA2:B13を供給するわけです。 勢揃い の議論になります。

    =FILTER(A2:B13, B2:B13=F1, "検索結果なし")

    その結果、F1で定義したターゲットグループの参加者のリストが得られる。

    例2.隣接しない列のフィルタリング

    FILTER関数が連続しない列を返すようにするには、次の巧妙なトリックを使用します。

    1. のテーブル全体を使って、必要な条件のFILTER式を作成します。 勢揃い .
    2. 上記の数式を別のFILTER関数の中に入れ込む。 ラッパー」関数を構成するには、TRUEとFALSEの値、または1と0の値を配列定数として使用する。 含む 引数で、TRUE (1) は保持する列を示し、FALSE (0) は除外する列を示します。

    例えば 名称 (1列目)と ウィンズ (3列目)では、{1,0,1}または{TRUE,FALSE,TRUE}を使用しています。 含む の引数は、外側のFILTER関数の引数です。

    =filter(filter(a2:c13, b2:b13=f1), {1,0,1})

    または

    =filter(filter(a2:c13, b2:b13=f1), {ttrue,false,true})。

    FILTER関数が返す行数を制限する方法

    FILTER式でかなり多くの結果を見つけたが、ワークシートのスペースが限られていて、下のデータを削除できない場合、FILTER関数が返す行数を制限することができます。

    F1でターゲット層から選手を引き抜く簡単な計算式の例で、その働きを見てみましょう。

    =filter(a2:c13, b2:b13=f1)

    上記の式では、見つかったすべてのレコード(この例では4行)を出力していますが、2行分のスペースがあるとします。 見つかった最初の2行だけを出力するには、次のようにします。

    • FILTERの数式を 勢揃い INDEX関数の引数を指定します。
    • については 行番号 INDEXの引数には、{1;2}のような縦配列定数を使用します。 これは、何行を返すかを決定します(この例では2)。
    • については 列番号 引数には {1,2,3} のような水平配列定数を使用します。 これはどの列を返すかを指定します(この例では最初の3列を返します)。
    • 条件に合うデータが見つからなかったときに起こりうるエラーに対処するために、数式をIFERROR関数で囲むことができます。

    完全な式はこのような形になる。

    =IFERROR(INDEX(FILTER(A2:C13, B2:B13=F1), {1;2}, {1,2,3}), "結果なし")

    大きなテーブルを扱う場合、配列定数を手書きするのは非常に面倒ですが、SEQUENCE関数を使えば、自動的に連番を生成することができます。

    =IFERROR(INDEX(FILTER(A2:C13, B2:B13=F1), SEQUENCE(2), SEQUENCE(1, COLUMNS(A2:C13))), "結果なし")

    最初のSEQUENCEは、最初の(そして唯一の)引数で指定された数の連番を含む垂直配列を生成します。 2番目のSEQUENCEは、COLUMNS関数を使ってデータセットの列数を数え、同等の水平配列を生成します。

    ヒント:データを返すには 各欄 に使用する水平方向の配列定数で,すべての列ではなく,1つの列を指定します. 列番号 例えば、1列目と3列目からデータを抽出する場合は、{1,3}を使用します。

    ExcelのFILTER関数が動作しない

    ExcelのFILTER式がエラーになる場合、その多くは以下のようなものでしょう。

    #CALC!エラー

    オプションの場合、発生します。 if_empty 引数を省略した場合、条件を満たす結果が得られないことがあります。 これは、現在のExcelが空の配列をサポートしていないためです。 このようなエラーを防ぐには、必ず if_empty を計算式で使用することができます。

    #VALUEエラー

    が発生したときに発生します。 勢揃い 含む は、相容れない次元のものである。

    #N/A、#VALUEなど。

    に何らかの値がある場合、異なるエラーが発生することがあります。 含む 引数がエラーであるか、ブール値に変換できない場合。

    #NAMEエラー

    古いバージョンのExcelでFILTERを使用しようとすると発生します。 Office 365とExcel 2021でのみ使用できる新しい関数ですので、覚えておいてください。

    新しいExcelでは、関数名のスペルを誤って入力すると、#NAMEエラーが発生します。

    #SPILLエラー

    多くの場合、このエラーは、流出範囲内の1つ以上のセルが完全に空白でない場合に発生します。 これを修正するには、空でないセルをクリアまたは削除します。 その他のケースを調査して解決するには、Excelの#SPILL! エラー:その意味と修正方法をご覧ください。

    #REF!

    FILTER式が異なるワークブック間で使用され、ソースワークブックが閉じられると発生します。

    以上、エクセルでデータを動的にファイリングする方法でした。 読んでくださってありがとうございました!また来週のブログでお会いしましょう。

    練習用ワークブックをダウンロードする

    Excelで数式を使ったフィルタリングを行う(.xlsxファイル)

    Michael Brown は、ソフトウェア ツールを使用して複雑なプロセスを簡素化することに情熱を注ぐ熱心なテクノロジー愛好家です。テクノロジー業界で 10 年以上の経験があり、Microsoft Excel と Outlook、さらに Google Sheets と Docs のスキルを磨いてきました。 Michael のブログは、彼の知識と専門知識を他の人と共有することに特化しており、生産性と効率を向上させるためのわかりやすいヒントとチュートリアルを提供しています。経験豊富なプロフェッショナルであろうと初心者であろうと、Michael のブログでは、これらの重要なソフトウェア ツールを最大限に活用するための貴重な洞察と実践的なアドバイスを提供しています。