更新日:、 作成日:

エクセル FILTER 関数:セルの範囲を条件に一致する値に絞り込む

はじめに

エクセルの FILTER 関数の使い方を紹介します。

FILTER 関数はセルの範囲から条件を満たす行や列を抽出します。

=FILTER(A1:C3,C1:C3>=100) のようにして、列「C」の値が 100 以上の行を抽出できます。

=FILTER(A1:C3,A1:C1="エクセル") のようにして、行「1」の値が エクセル の列を抽出できます。

=FILTER(A1:C3,{TRUE,FALSE,TRUE}) のようにして、1 列目と 3 列目を抽出できます。

複数条件にして抽出したり、行を抽出してから列を抽出できます。

一意の値を取得するには「UNIQUE 関数」を使用します。
フィルターを使用する方法は「フィルターでデータを抽出する」をご覧ください。
セルを検索する方法は「文字列やセルを検索する」をご覧ください。
この関数は 365 または 2021 から使用できます。

FILTER 関数の引数

FILTER(範囲, 含める)
範囲の中から含める行に対応した範囲を行単位で抽出します。
範囲の中から含める列に対応した範囲を列単位で抽出します。

FILTER(範囲, 含める, 空の場合)
結果が空の場合に返す値を指定できます。

引数「範囲」セルの範囲や配列を指定します。
引数「含める」条件を比較演算子を使って指定します。
行を抽出するには、引数「範囲」と同じ行数の範囲に対して条件を指定します。
列を抽出するには、引数「範囲」と同じ列数の範囲に対して条件を指定します。
引数「空の場合」省略できます。
結果が空のときに返す値を指定します。数値、文字列、セル参照、関数などを指定できます。
スピル化

スピル化:セルの範囲や配列を指定すると結果が「スピル」します。

引数「含める」

使用できる比較演算子には次のものがあります。

演算子 演算名 使用例 結果
=等しい1=2FALSE
<>等しくない1<>2TRUE
>大きい1>2FALSE
<小さい1<2TRUE
>=以上1>=2FALSE
<=以下1<=2TRUE

使い方、条件が一つ

FILTER 関数の条件が一つの使い方を紹介します。

結果は配列になり複数のセルに表示されます。また、セルの範囲に対して比較しています。これはスピルという機能によるものです。詳しくは「スピル、動的配列数式の使い方」をご覧ください。

行を抽出する

セルの範囲から含めるが TRUE の行を抽出します。通常は引数「含める」に条件を入力します。; で区切った配列で、直接抽出したい行を指定できます。

=FILTER(B3:D7,E3:E7)
=FILTER(B3:D7,{TRUE;FALSE;TRUE;FALSE;TRUE})

引数「含める」が 1 列のときに行を抽出できます。

9

列を抽出する

セルの範囲から名前と値の列を抽出します。, で区切った配列で、直接抽出したい列を指定できます。

=FILTER(B3:D7,B9:D9
=FILTER(B3:D7,{TRUE,FALSE,TRUE}))

引数「含める」が 1 行のときに列を抽出できます。

10

何も抽出されないときの値を表示する

何も抽出されないときに なし を表示します。何も表示しないなら空文字 "" を入力します。

=FILTER(B3:D7,E3:E7,"なし")
=FILTER(B3:D7,E3:E7,"")
11

値が 30 以上の行を抽出する

値が 30 以上の行を抽出します。

=FILTER(B3:D7,D3:D7>=30)

行単位に抽出するには、1 列に対して D3:D7>=30 のように条件を入力します。

12

名前がエクセルの行を抽出する

名前が エクセル の行を抽出します。

=FILTER(B3:D7,B3:B7="エクセル")
13

特定の文字が入っている行を抽出する

名前に E の文字が入っている行を抽出します。「FIND 関数」または「SEARCH 関数」を使用して特定の文字が入っているか部分一致で検索できます。

  • FIND 関数:大文字小文字を区別します。
  • SEARCH 関数:大文字小文字を区別しません。
=FILTER(B3:D7,IFERROR(FIND("E",B3:B7),FALSE))
=FILTER(B3:D7,IFERROR(SEARCH("E",B3:B7),FALSE))

検索値が見つからないときはエラーになるので「IFERROR 関数」から FALSE にして、含めないようにできます。

14

使い方、複数条件

FILTER 関数の複数条件の使い方を紹介します。

スピルで AND 条件

複数条件にするには「AND 関数」を使用しますが「スピル」されないので、引数「含める」には入力できません。

スピルで AND 条件を入力するには条件を掛け算します。条件を () で囲む必要があります。

(条件1)*(条件2)

名前が エクセル でバージョンが 365 かスピルで判定します。

=(B3:B7="エクセル")*(C3:C7=365)

結果が TRUE のときは 1、FALSE のときは 0 になります。

これを引数「含める」に入力して、複数条件を満たす行や列を抽出できます。

=FILTER(B3:D7,(B3:B7="エクセル")*(C3:C7=365))
15
スピルについて詳しくは「スピル、動的配列数式の使い方」をご覧ください。

スピルで OR 条件

複数条件にするには「OR 関数」を使用しますが「スピル」されないので、引数「含める」には入力できません。

スピルで OR 条件を入力するには条件を足し算します。条件を () で囲む必要があります。

(条件1)+(条件2)

名前が エクセル またはバージョンが 365 かスピルで判定します。

=(B3:B7="エクセル")+(C3:C7=365)

結果が TRUE のときは 1 以上、FALSE のときは 0 になります。

これを引数「含める」に入力して、複数条件を満たす行や列を抽出できます。

=FILTER(B3:D7,(B3:B7="エクセル")+(C3:C7=365))
16
スピルについて詳しくは「スピル、動的配列数式の使い方」をご覧ください。

数値が指定の範囲内

値が 20 以上でセル「E3」以下の行を抽出します。

=(D3:D7>=20)*(D3:D7<=E3)

日付が指定の範囲内

日付が開始日から 2000/12/31 の範囲の行を抽出します。「DATE 関数」を使用して日付を入力できます。

=(C3:C7>=E3)*(C3:C7<DATE(2001,1,1))

終了日を (C3:C7<=DATE(2000,12,31)) にすると、時刻が含まれるときに終了日が条件に一致しなくなるので、次の日より小さい判定にしています。

名前がエクセルかつ値が 30 以上

名前が エクセル で値が 30 以上の行を抽出します。

=(B3:B7="エクセル")*(D3:D7>=30)

高度な使い方

FILTER 関数と他の関数を組み合わせた使い方などを紹介します。

行を抽出してから列を抽出する

値が 30 以上の行を抽出して、名前と値の列を抽出します。行と列を抽出するには FILTER 関数を入れ子にします。

=FILTER(FILTER(B3:D7,B3:B7="エクセル"),{TRUE,FALSE,TRUE})

引数「含める」に配列を入力して、抽出する列を指定できます。

18

抽出した結果を並び替えする

値が 30 以上の行を抽出して、値の降順で並び替えをします。「SORT 関数」を使用して並び替えができます。

=SORT(FILTER(B3:D7,D3:D7>=30),3,-1)
17

最初の行だけ抽出する

値が 30 以上の最初の行を抽出します。「INDEX 関数」を使用して何番目の行か指定できます。

=INDEX(FILTER(B3:D7,D3:D7>=30),1,0)
=INDEX(FILTER(B3:D7,D3:D7>=30),2,0)
=FILTER(B3:D7,D3:D7>=30)
19

解説

行を抽出するには、引数「含める」を 1 列にします。その値が TRUE の行を引数「範囲」から抽出します。{TRUE;FALSE;TRUE} のように ; で区切った配列で、直接抽出したい行を指定できます。

列を抽出するには、引数「含める」を 1 行にします。その値が TRUE の列を引数「範囲」から抽出します。{TRUE,FALSE,TRUE} のように , で区切った配列で、直接抽出したい列を指定できます。

引数「範囲」と引数「含める」の行数または列数が一致していないときはエラー #VALUE! になります。

引数「含める」が数値のときは 0 なら FALSE、それ以外なら TRUE として扱います。

文字列を =<> から比較するとき、大文字と小文字を区別しません。"ABC"="abc" は TRUE になります。「EXACT 関数」を使用して大文字小文字を区別できます。

引数「含める」が TRUE や FLASE 以外の文字列のときはエラー #VALUE! になります。

引数「含める」が複数の行列のときはエラー #VALUE! になります。

引数「含める」の中にエラーが含まれているときは、結果もそのエラーになります。

引数「含める」がすべて FALSE なら、引数「空の場合」を返します。

引数「含める」がすべて FALSE のときに引数「空の場合」を省略しているときは、エラー #CALC! になります。

文字列かどうかや空白など、特定の値を条件にする方法は「COUNTIF 関数」にまとめています。