最終更新日:2022-08-26FILTER関数(範囲をフィルター処理)FILTER関数は、定義した条件に基づいてデータ範囲をフィルター処理した結果を返します。FILTER関数はスピルで登場した新しい関数です。最後の方では、表示する列を選択する方法も掲載しています。フィルター処理する元データを指定します。セル範囲または配列です。フィルター条件を指定します。元データの配列の縦または横の大きさと同じ真偽値(TRUE,FALSE)の1次元配列を指定します。フィルター結果が空の場合に表示する値を指定します。フィルター結果が空の場合にこの引数を省略していると、#CALC!となります。FILTER関数使用例のサンプルデータ使い道の広い関数です。配列を意識して使いこなすと、かなり便利なことができます。以下のFILTER関数使用例で使う表は以下になります。※なんちゃって個人情報です。以下では、上表を元にFILTER関数を使用した場合を例示しています。数値でフィルター30歳未満でフィルター=FILTER(A2:E51,C2:C51<30)文字でフィルター"東京都"でフィルター=FILTER(A2:E51,E2:E51="東京都")フィルター結果が0件の場合フィルター結果が0件の場合に、引数「空の場合」を省略していると、#CALC!のエラーとなります。引数「空の場合」を適宜指定します。空白セルを0ではなく空白にする場合エクセル関数全般での問題ですが、空白セルを参照すると0になってしまいます。=FILTER(A2:E51,B2:B51="女")空白セルを空白にしたい場合、いろいろな方法がありますが、&""を付け加える方法が最も簡単だと思います。"東京都"でフィルター=FILTER(A2:E51,(B2:B51="女")*(E2:E51="東京都"))AND条件は、*演算子を使います。個々の真偽値の掛け算がAND条件になります。AND関数は使えません。"東京都"でフィルター=FILTER(A2:E51,(B2:B51="女")+(E2:E51="東京都"))OR条件は、+演算子を使います。個々の真偽値の足し算がOR条件になります。OR関数は使えません。四則演算ここだけ少し違うデータ例になります。C列とD列の足し算の結果でフィルターする場合。=FILTER(A2:E51,C2:C51+D2:D51>100)論理式として評価できる式であればどんな四則演算でも構いません。文字列関数LEFT,MID,RIGHT等の文字列関数が使えます。"京都府"と"大阪府"でフィルターしています。=FILTER(A2:E51,RIGHT(E2:E51)="府")日付・時刻関数YEAR,MONTH,DAY等の日付・時刻関数が使えます。10月生まれでフィルターしています。=FILTER(A2:E51,MONTH(D2:D51)=10)ただし、FILTER出力結果の日付の表示形式は自動では設定されません。表示形式を設定してください。引数「含む」の計算結果が1行でもエラーを含んでいる場合、FILTER関数全体がエラーとなります。=FILTER(A2:E51,FIND("京",E2:E51)>0)FIND関数は、検索値が無い場合はエラーとなるため、上記ではFILTER関数全体がエラーとなっています。このような場合は、IFERROR関数でくるみます。見出し列を範囲に含めたり列全体で指定したりする場合は、IFERROR関数が必要になる場合が多くなります。横(列)のデータによってフィルターすることもできます。=FILTER(A1:E51,A1:E1="年齢")ある特定の文字列を含む見出し列でフィルターするといった使い方ができます。実務的には、この機能だけを単発で使う事は少ないように思います。この下の布石になります。表示する列を選択する引数「含む」は真偽値(TRUE,FALSE)の配列を指定するものです。1次元の配列であれば、縦・横どちらでも受け付けてくれます。縦の配列{}の中に;セミコロンで区切って各要素を入れます。{1;2;3}123横の配列{}の中に,カンマで区切って各要素を入れます。3そこで、ここまでの例で示した「含む」のほとんどは縦の配列であることを理解してください。条件に合致した行はTRUE、それ以外はFALSEです。TRUEは1、FALSEは0として代用できます。そこで、「含む」に直接この配列を指定してみましょう。「含む」の行数は元配列と同じ行数にしなければならないので、ここでは5行だけにしました。=FILTER(A2:E6,{1;0;1;0;1})「含む」に指定した配列の1(TRUE)の行だけが出力されました。いえ、このような使い方をすることはまずないでしょう。横の配列を指定してみましょう=FILTER(A2:E6,{1,0,1,0,1})見事に元範囲の1,3,5列だけが出力されました。FILTER関数の結果をFILTERすれば、条件で絞り込んだ後に必要な列だけに絞り込めます。FILTER関数をネストして表示する列を選択=FILTER(FILTER(A2:E51,C2:C51<30),{1,0,1,0,0})外側のFILTER関数に指定した配列通りの列のみ出力されました。これを使えば、元表から欲しい列だけにすることができます。注意点としては、「含む」に指定する配列の大きさは、元表の列数に必ず合わせることです。表示する列の選択を自動化する配列{1,0,1,0,0}を自動的に作成すれば良いだけです。配列{1,0,1,0,0}を見出し文字列から自動生成します。0このようになりますので、これをそのま引数に指定できます。=FILTER(FILTER(A2:E51,C2:C51<30),COUNTIF(G1:H1,A1:E1))FILTER関数の結果を他の関数で使うFILTER関数が返すものは配列です。したがって、配列を受け入れる関数の引数として使う事が出来ます。"東京都"の"男"の平均年齢を出して見ましょう。AVERAGEIFSで簡単に求められます。=AVERAGEIFS(C2:C51,B2:B51,"男",E2:E51,"東京都")あくまで、ここまでの総復習としてやってみましょう。=AVERAGE(FILTER(FILTER(A2:E51,(B2:B51="男")*(E2:E51="東京都")),COUNTIF(C1,A1:E1)))この数式は解読してみてください。ここまでに説明してきたことを組み合わせて使っているだけです。この数式が読めれば、FILTER関数はほぼ確実に理解できたと言えるでしょう。スピル導入によって、エクセルの使い方が大きく変わろうとしています。FILTER関数は、その中核となる関数と言えるでしよう。フィルターは定義した条件に基づいたデータ範囲です。範囲または配列の内容を並べ替えます。範囲または配列の内容を、対応する範囲または配列の値に基づいて並べ替えます。一覧表または範囲内から重複データを削除した一覧を返します。0から1までのランダムな数値の配列を返します。1、2、3、4など、配列内の連続した数値の一覧を生成します。範囲または配列を検索し、見つかった最初の一致に対応する項目を返します。一致を返すことができます。配列またはセル範囲内の項目の相対的な位置を返します。見るTRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)無効な前方参照か、コンパイルされていない種類への参照です。Case)|VBA入門9.メッセージボックス(MsgBox関数)|VBA入門10.マクロとは?VBAとは?VBAでできること|VBA入門ホームエクセル全般エクセル入門FILTER関数(範囲をフィルター処理)このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。アクセスランキングサイトマップ事業案内お問い合わせホームエクセル全般エクセル入門FILTER関数このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。